Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложениям иногда требуется рисование графики в целевом объекте, где целевой объект не предназначен для немедленного отображения. Этот тип рисования иногда называется "внеэкранной отрисовкой" или "рисованием в текстуру". Это полезно, если, например, выходные данные приложения операции рисования должны быть сохранены в файле, возвращены в виде массива пикселей или используются в качестве входных данных для последующей операции.
Win2D поддерживает эти сценарии, и они легко выполняются с CanvasRenderTargetпомощью .
CanvasRenderTargetCanvasBitmapрасширяется и имеет методCreateDrawingSession(). Используется CreateDrawingSession для рисования графического содержимого CanvasRenderTargetв объект . Например:
CanvasDevice device = CanvasDevice.GetSharedDevice();
CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96);
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawRectangle(100, 200, 5, 6, Colors.Red);
}
Обратите внимание, что вызывается Clearметод. Без этого растровое изображение будет инициализировано с неопределенным содержимым. Сеансы рисования, созданные с помощью CanvasRenderTarget элементов управления XAML Win2D, отличаются от тех, которые создаются в элементах управления XAML Win2D с точки зрения Clear поведения. Элементы управления всегда очищаются автоматически с помощью Win2D при создании сеанса рисования. CanvasRenderTargets нет. Таким образом, у приложений есть возможность вносить добавочные изменения в CanvasRenderTarget-s, и не перерисовывать всю сцену каждый раз.
Чтобы нарисовать CanvasRenderTarget другой сеанс рисования, просто используйте DrawImage(ICanvasImage) или одну из ее перегрузк. Например:
void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(offscreen, 23, 34);
}
Или, чтобы использовать CanvasRenderTarget в качестве входных данных для эффекта, передайте его в любом месте, где эффект ожидает использования IGraphicsEffectSource в качестве источника. Например:
GaussianBlurEffect blurEffect = new GaussianBlurEffect()
{
Source = offscreen,
BlurAmount = 3.0f
};
Приложение может закрывать и повторно открывать сеансы рисования в произвольном CanvasRenderTarget режиме.
Операции рисования не фиксируются до CanvasRenderTarget удаления объекта сеанса рисования. В C#блок using может упорядочить это.
Следует указать, что CanvasRenderTarget это не элемент управления XAML и не включает дерево XAML вообще. Он подходит как для приложений XAML, так и для приложений, отличных от XAML.
Windows developer