带有 GDI 或 GDI+ 的高级图形
Posted
技术标签:
【中文标题】带有 GDI 或 GDI+ 的高级图形【英文标题】:Advanced graphics with GDI or GDI+ 【发布时间】:2012-12-08 05:45:52 【问题描述】:我正在寻找一些高级教程,或者可能是用 C++ 或 .NET 编写的开源应用程序,它们可以实现复杂的基于矢量的应用程序,例如 MS Visio 或 Autocad。我需要知道的是,当用户可以将复杂对象移动到其他复杂对象上时,此类应用程序的大师如何在鼠标移动时管理复杂对象(> 1000 个矩形)的渲染。我知道 XOR 绘画之类的东西,但如果你检查上面的应用程序,很明显他们没有使用这种技术。整个对象在另一个对象的顶部平滑移动,而不仅仅是它的 XOR 反射。另外,移动对象在移动时会显示一些附加信息,例如当前坐标或其他信息,因此它不是保存在位图中的静态表示。
欢迎任何建议。
谢谢
【问题讨论】:
我发现双缓冲对于避免在绘图时闪烁和平滑事物非常有效 是的,我知道,这就是我正在使用的(BufferedGraphics 及其兄弟),它工作正常,但我看到移动鼠标时 CPU 使用率很高,我想避免这个。 【参考方案1】:许多图形应用程序使用某种spatial partitioning 来减少他们需要查看的对象数量。例如,如果您移动一个矩形,应用程序会在 quadtree 中查找并找到其边界框与移动矩形重叠的 2 或 3 个其他对象。然后它只需要对 2 或 3 个对象而不是 1000 个对象进行完整的碰撞检测和图形处理。
【讨论】:
是的,那是在 Autocad 中涉及非常大的对象时,在我的例子中,我有一个复杂的交易图表,我需要使用鼠标绘制一些复杂的图形。我很确定 MS Visio 中没有使用这些东西。寻找具有类似功能且有源代码可供检查的应用程序。 这是我想要完成的视频youtube.com/watch?v=hOkKf2Ixb-Q。那是我测试的应用程序。它工作正常,但是当我移动鼠标并绘制所有移动的东西时,它会占用大量 CPU。这是我拥有的控件pastebin.com/SF7k6KjC,这是绘图pastebin.com/MQPGXm9u。欢迎任何想法。如果需要,我可以发送整个 VS 2010 解决方案。以上是关于带有 GDI 或 GDI+ 的高级图形的主要内容,如果未能解决你的问题,请参考以下文章
C#(Sharp)GDI plus与图形编程(计算机图形学必备知识)