UWP CanvasRenderTarget提供损坏的图像

时间:2016-05-17 13:43:06

标签: uwp win2d

我正在做一个'#34; hello world"使用win2d进行类型测试。 在我的画布绘制事件中,这给了我一个很好的圆形圆圈,如我所料:

args.DrawingSession.FillCircle(100, 100, 50, Windows.UI.Colors.Red)

但是我想在屏幕上画#34;所以我试过了:

    Dim dev As CanvasDevice = sender.Device
    Dim crt As New CanvasRenderTarget(dev, CSng(sender.ActualWidth), CSng(sender.ActualHeight), sender.Dpi)
    Dim ds As CanvasDrawingSession = crt.CreateDrawingSession
    ds.FillCircle(100, 100, 50, Windows.UI.Colors.Red)

    args.DrawingSession.DrawImage(crt)

这种方法有效,但当我调整页面大小以强制重绘时,我会看到各种奇怪的损坏图像,看起来像撕裂,未初始化的内存等。

发生了什么,我该如何解决这个问题? 非常感谢。

2 个答案:

答案 0 :(得分:1)

在极少数情况下,您只需要调用CanvasDrawingSession.Flush,这些情况涉及不同图形API之间的互操作。这将对你在这里做的事情有所帮助,但是比必要的要贵得多。

问题是你没有处理你的绘图会话。完成绘制后,需要处理CreateDrawingSession的返回值。在C#中,通常通过“using”语句完成,虽然显式调用Dispose具有相同的效果。害怕我不太了解VB足以告诉VB等效于“使用”的是什么。

答案 1 :(得分:0)

好的,想通了,需要在开始时使用ds.clear,在DrawImage之前执行ds.flush以使硬件渲染器实际执行此操作