在OnRender中使用DrawingContext绘图在场景后面是如何工作的

本文关键字:何工作 工作 OnRender DrawingContext 在场 绘图 | 更新日期: 2023-09-27 18:26:11

我正在WPF窗口中绘制一个相当复杂的"图像"(通常需要刷新,并且有许多绘制基元),方法是覆盖单独UIElement的OnRender方法,并使用DrawingContext直接绘制基元。

我的问题是,幕后到底发生了什么?据我所知,这不是使用保留模式(如果我将"形状"放置到控件中,就会出现这种情况)。我之所以问这个问题,是因为我担心这样的绘图实际上只会在后面使用GDI+,这会带来它自己的问题(例如,打印用GDI+绘制的东西已经花费了我们的时间和精力)。

除了那些明显的MSDN资源之外,还有什么好的资源可以启发我吗?

还是我完全错了?

谢谢你给我的任何正确的答案。[编辑:拼写]

在OnRender中使用DrawingContext绘图在场景后面是如何工作的

您仍然使用保留模式,只是没有使用高级对象(没有动画对象等),而是使用简单的点、线等。

我已经深入研究了DrawingContext的来源,据我所知,它似乎正在使用一些低级魔法将所有这些DrawXYZ命令推入队列(队列本身由任意大小的结构组成,每个结构表示某个命令)。

然后WPF在另一个线程上处理这个队列,在这个问题中表示为呈现线程。我还没有验证这一点,但我猜WPF在所有绘图中都使用了StreamingContext。

此外,WPF正在使用DirectX进行渲染,这可以从这篇博文中看出,它可以更好地了解WPF的实际功能。

我希望这能为你澄清一些事情。