我正在做一个'#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)
这种方法有效,但当我调整页面大小以强制重绘时,我会看到各种奇怪的损坏图像,看起来像撕裂,未初始化的内存等。
发生了什么,我该如何解决这个问题? 非常感谢。
答案 0 :(得分:1)
在极少数情况下,您只需要调用CanvasDrawingSession.Flush,这些情况涉及不同图形API之间的互操作。这将对你在这里做的事情有所帮助,但是比必要的要贵得多。
问题是你没有处理你的绘图会话。完成绘制后,需要处理CreateDrawingSession的返回值。在C#中,通常通过“using”语句完成,虽然显式调用Dispose具有相同的效果。害怕我不太了解VB足以告诉VB等效于“使用”的是什么。
答案 1 :(得分:0)
好的,想通了,需要在开始时使用ds.clear,在DrawImage之前执行ds.flush以使硬件渲染器实际执行此操作