как получить сеанс рисования из элемента управления холстом (win2d)

В приложении win8, как получить сеанс рисования из элемента управления холстом (win2d) или как рисовать изображение в элементе управления холстом из функции: canvasControl_Draw.


person ljquality    schedule 11.09.2015    source источник


Ответы (2)


Вы не можете - это ключевая часть политики, предоставляемой CanvasControl.

Это гарантирует, что:

  • сеанс рисования создается и закрывается в нужное время

  • рисование не выполняется до создания ресурсов

  • обрабатываются ошибки, связанные с потерей устройства

Если вы хотите принудительно перерисовать, вы можете использовать CanvasControl.Invalidate ().

В качестве альтернативы вы можете обнаружить, что хотите выполнить рендеринг за пределами экрана CanvasRenderTarget (который можно вызвать CreateDrawingSession). Затем используйте DrawImage в своем CanvasControl_Draw, чтобы нарисовать цель рендеринга в элементе управления.

person Damyan    schedule 14.09.2015

Если ваша цель - просто визуализировать изображение, вы можете сделать это, не используя метод 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);
    }
}
person Bill Reiss    schedule 20.02.2017