В приложении win8, как получить сеанс рисования из элемента управления холстом (win2d) или как рисовать изображение в элементе управления холстом из функции: canvasControl_Draw.
как получить сеанс рисования из элемента управления холстом (win2d)
Ответы (2)
Вы не можете - это ключевая часть политики, предоставляемой CanvasControl.
Это гарантирует, что:
сеанс рисования создается и закрывается в нужное время
рисование не выполняется до создания ресурсов
обрабатываются ошибки, связанные с потерей устройства
Если вы хотите принудительно перерисовать, вы можете использовать CanvasControl.Invalidate ().
В качестве альтернативы вы можете обнаружить, что хотите выполнить рендеринг за пределами экрана CanvasRenderTarget (который можно вызвать CreateDrawingSession). Затем используйте DrawImage в своем CanvasControl_Draw, чтобы нарисовать цель рендеринга в элементе управления.
Если ваша цель - просто визуализировать изображение, вы можете сделать это, не используя метод CanvasControl.Draw. Вот код одного из моих приложений, который отображает изображение и сохраняет его в файл (PageRenderer - это мой класс, выполняющий рендеринг):
public async Task GenerateThumbnailAsync(IRandomAccessStream stream, int width, int height, CanvasBitmapFileFormat imageType)
{
CanvasDevice device = CanvasDevice.GetSharedDevice();
PageRenderer renderer = new PageRenderer(device);
using (CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96))
{
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
ds.Clear(Colors.Black);
renderer.DrawPage(ds);
}
await offscreen.SaveAsync(stream, imageType);
}
}