WPF 关于绘图个人总结
内容均为个人总结。
如果错误请告知,并多多见谅。
总的来说绘图是分为两个范围,一是形状,二是像素填充。
形状也就是绘制矩形,圆形,复杂组合形状。
像素填充例如图像填充,但更多是位图操作,同样也是可以绘制形状,不过对于形状的填充算法相对很难,是需要独立进行计算。
在WPF中,对应着分为控件绘图,位图操作。
对于简单的绘图我也不多加复述,通常一般的难点,也就是复杂性绘图,大规模绘图等。
一般呢,对于有形状绘图有一下方案
1 直接重载OnRender方法并在内使用DrawingContext进行绘图
2 劫持承载控件,并创建继承DrawingVisual控件,并使用RenderOpen方法进行绘制
3 使用GDI+绘图并配合Bitmap后使用DrawingContext后经行绘图
通常,方法1,可能使用范围过小,方法3呢效果不错,但是放大后效果不好。
所以我们重点说一下方法2
使用方法很简单,主要是里面绘制的方法。
最好的办法就是使用DrawGeometry。
但是问题是是提交多个控件绘图对应内容呢? 还是提交一次后内部多次绘制呢?
举例来说,我之前发的矩形格子,使用的是多次提交,每次提交少量绘制,当绘制大量内容后意味大量提交,大量绘制,虽然单次绘图很快基本0.2毫秒,但架不住多啊,也就造成卡顿。
所以正确的方法应该是少量提交,内部多次绘制,减少不必要卡顿。
其次,绘图的方式最好使用streamgeometry,这是真的快。并使用线性背景色,不过使用ImageBrush会是更好的选择。
例图 2*2像素的格子,大小是1920*1010,使用的是ImageBrush。同时画笔冻结等方式,性能也会提交。
一般情况下,大部分是绘制图表等方式,性能不行其实是可以通过一些方式避免,例如对数据进行处理,归一化,抽样等方式,将绘制的东西减少。
还有说的,就是位图。
一般情况下,WPF2D绘图最快的就是可写位图,真的是快,不论大小,内容还是对颜色上的控制,相对快很多,但是缺点是什么? 是放大后,是需要重新对局部处理。这又是一些其他的开销。
2D绘图的使用效果一般很够用了。
使用顺序可以用是 控件绘制-可写位图,如果这些效果还不好,那就上大招D3Image,因为前面的绘制的东西,使用显卡效率不高。D3Image是直接Dx所以会高很多。所以效果很好。
相关代码下载【没有位图操作,D3Image等内容,具体使用相对不难,而找到具体使用差距才是本意,后续会补充】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!