GDI+, 如何提高折线的绘制性能

yzlxy 2008-05-06 03:39:41
在绘制Line, PolyLine,Arc,Circel 这样的形状时,只有PolyLine是用链表存储数据点的

我发现,数据点越多,绘制性能直线下降

我测试的点在200个左右,绘制就感觉有点不同步,拉伸、旋转操作也是一样

这时什么原因?

我有采用了双缓冲绘制,怎么还会如此慢? 我看AutoCAD 画几百个点的折线很快的呀
...全文
200 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxy21c 2010-04-27
  • 打赏
  • 举报
回复
是啊,我也遇到问题,就是用GDI+划几百条不连接的直线,如果直接使用drawline函数则性能很差,若直接drawlines或draw graphicpath,则这些直线会首尾相连,大家有什么好的解决方法吗?
yzlxy 2008-05-06
  • 打赏
  • 举报
回复
Visio 也是用GDI+ 引擎开发的, 绘制性能很好的

怎么我就达不到呢
EDraw 2008-05-06
  • 打赏
  • 举报
回复
AutoCAD 使用d3d 或者 opengl 我的猜测
yzlxy 2008-05-06
  • 打赏
  • 举报
回复
绘制过程如下:

1、启用“绘制Polyline”命令后, 将所有层的所有图形绘制到一张内存Bitmap1上缓存

2、鼠标第一次按下,检测当前所在层的newShape(存储正在临时新建的图形)对象是否是null

如果是null,就创建该图形,然后加入鼠标按下的坐标点到它的链表中。

这时我为newShape也做了一个缓存的Bitmap2,以便鼠标Move的时候,不需要重复绘制newShape中的所有点

以后只要鼠标按下,就加入当前的坐标点,然后重新缓存Bitmap2(*)后,

在显示系统中先绘制缓存的Bitmap1,再绘制缓存的Bitmap2

3、当鼠标移动的时候, 先绘制缓存的Bitmap1, 再绘制Bitmap2, 最后绘制【链表最后一个节点】和【当期鼠标移动位置】的连线,实现实时位置的位置

我测试发现, 性能瓶颈在(*)位置,即鼠标连续快速按下的时候,绘制会很缓慢

我快速加了10个点,它才从第一个点不急不慢的画过来
harry_qj 2008-05-06
  • 打赏
  • 举报
回复
200个点怎么画的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧