c# - 如何在 WPF 中尽可能高效地绘制图形

标签 c# wpf graphics graph vector-graphics

我正在创建一个严重依赖图形节点树的工具。当前的实现是用 Java 完成的,我将它移植到 C# 上的通用代码库,因此它可以被各种渲染实现使用,也因为我想使用 WPF 的强大功能来实现用户友好的界面。

逛了一天,发现了各种通过WPF绘制矢量图的方法。

This guy谈到 WPF 开发人员可以选择的不同层。由于一开始我想纯粹使用 WPF 进行渲染,所以我想在“可视层”上工作。

然后我遇到了这样的事情: DrawingVisual , GeometryDrawing , FrameworkElement/UIElement/形状

因此,我对所有以完全不同的方式最终实现相同的不同实现感到有点不知所措。

Graph-Node 库的所有逻辑(包括碰撞检测和鼠标拖动)都已移植到 C#。由于它是在考虑图形渲染器(如 XNA、SlimDX、OpenTK 等)的情况下制作的,因此在性能方面实现 WPF 渲染器的最佳方式是什么(例如,它将绘制图形库告诉它的任何内容)画画?

基本上,生成的 WPF 控件充当 Canvas ,但它必须非常轻巧,除了为我提供绘制圆圈、线条和其他形状的方法外,没有任何简洁的 WPF 功能:)

编辑:

我基本上想知道:要走的路是什么?我是否将 Canvas 扩展为图形的“宿主”,然后添加自定义的 UIElement 实现?或者我可以拥有一个可以绘制所有内容的类(class)(例如,一个 super super 图形)。很像重写 GDI 中的 OnPaint 或 Java 中的 Paint 方法(它提供一个 Graphics 对象来处理所有事情)。

最佳答案

我建议阅读 Optimizing Performance: 2D Graphics and Imaging .

一般来说,Drawing 对象的重量会比 Shapes 轻。这可能是您想要使用的。

关于c# - 如何在 WPF 中尽可能高效地绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366574/

相关文章:

c# - 在 C# 中使用 LINQ 解析 XML

c# - 找不到类型或命名空间名称 'MySql'(是否缺少 using 指令或程序集引用?)c# VS 2013

wpf - DataGrid 中的文本对齐方式

WPF DrawingBrush 性能

windows - 是否有用于 Windows 10 即时分辨率更改的 API?

c# - 如何在 Windows 安装程序的自定义操作中获取当前用户名?

c# - 如何在 MVC 网页中重用模型或 DAL 和 BLL

c# - WPF 用户控件中的 "DataContext = this"有什么问题?

C#:将一个位图绘制到另一个位图上,具有透明度

c++ - 在 CPU 上模拟 OpenGL 纹理映射以进行重投影