关于GDI处理绘制上万,十万基本图元的效率如何提高的问题?欢迎类似处理经验的同行给点建

checkyvc6 2004-04-01 10:11:04
要绘制线段和矩形,圆等基本图象,用什么方法比较快!
我项目中遇到的一个问题,绘制几千这样的基本图元没有什么问题,如果上万或者10多万以上重
新绘制就很慢了,在实现放大,缩小,移动或滚动时慢的实在令人无法忍受,请问各位谁有比较好的
办法来解决这样的问题 ??谢谢
(下面的方法我都用过了,双缓冲,剪切矩形,超过显示范围省略不画等等,但是还是有点吃力)
如果用DIRECTX,OPENGL这些图象引擎来处理这些基本图形,不知道是否可行,要注意点什么,我知道
directx是用过处理象素来绘制基本图形,这样的话遇到多边形还要自己计算象素点位置,好象很麻烦
哦。 请各位提供建议和更好的解决的办法!!欢迎有类似处理经验的同行给点提示!!
...全文
204 76 打赏 收藏 转发到动态 举报
写回复
用AI写文章
76 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushuaiboy 2004-04-12
  • 打赏
  • 举报
回复
mark
FengYuanMSFT 2004-04-12
  • 打赏
  • 举报
回复
Can you render your drawing into an EMF and send to me? For example, just print it and send me the EMF spool file. My email is fyuan at fengyuan dot com.

Thanks

Feng Yuan [MSFT] (www.fengyuan.com, blog.joycode.com/fyuan)
bluebohe 2004-04-11
  • 打赏
  • 举报
回复
mark
ll3008 2004-04-04
  • 打赏
  • 举报
回复
对 NCB(tmp) 而GDI绘制时好象只使用CPU。(个人看法,如有不对请大家指正)
-------------
其实GDI也是通过硬件驱动来完成绘制的,现在大部分显卡都支持gdi的硬件加速

过程:
GDI的调用通过DDI界面调用显卡的驱动
所有GDI函数都有相应的DDI接口,如果驱动不实现则Windows用系统软件算法实现,
但现在的显卡驱动哪个不对GDI驱动提供加速支持。(个人看法)
ll3008 2004-04-04
  • 打赏
  • 举报
回复
多线程不会加快你的绘制速度,只能改变程序的响应性能,
如果你的数据的2D的OpenGL只会更慢,
因为OpenGL的性能在3D计算,我试过OpenGL,
10000根2D线的绘制速度不如直接GDI快

1: 如果有可能,尽量不用GDI,因为GDI不能为你的数据进行逻辑优化

2: 重新绘制时只画改变的区域 (包括裁减区域)
checkyvc6 2004-04-03
  • 打赏
  • 举报
回复
NCB(tmp) 你真是热心!!

我这里可以下载了,大概是1s刷新一次吧

不过opengl我不是很熟,呵呵,以后有时间在慢慢学习吧
checkyvc6 2004-04-03
  • 打赏
  • 举报
回复
to dawndu(东南飞) 画在内存dc中还不是要用到GDI函数 速度不会提高多少

gagamazel 2004-04-03
  • 打赏
  • 举报
回复
好多高手出现,学习一下
up
dawndu 2004-04-02
  • 打赏
  • 举报
回复
希望有个好的解决
dawndu 2004-04-02
  • 打赏
  • 举报
回复
什么都可以画在内存DC中,然后一次BitBlt出来,所有操作都转移到这个上面
dawndu 2004-04-02
  • 打赏
  • 举报
回复
我也说几点意见:
1.一定要用图层,确定什么是要经常变化的,什么是基本不变的,然后用多缓冲
2.定时刷新
主要思想就是减少不必要的重画
如果老是重画10万多个图元,系统的确受不了的
用这个来做地图的时候效果是比较满意的
tix66 2004-04-02
  • 打赏
  • 举报
回复
多缓冲(可以考虑3缓冲),剪切矩形,超过显示范围省略不画
再加上 1.图元排序(关键) 2.多线程(关键)
NCB 2004-04-02
  • 打赏
  • 举报
回复
之前那个开了半透明(Alpha)混合,虽然只3个颜色最后却出来那么多。
这回关了,就一个颜色,20w个叉(40w条线)。
http://yishuijun.html.533.net/Lines2.exe
NCB 2004-04-02
  • 打赏
  • 举报
回复
这回该好了,还是 http://yishuijun.html.533.net/Lines.exe 大家试试。
NCB 2004-04-02
  • 打赏
  • 举报
回复
汗,忘了用的是Introductory Edition >_<
偶只有这个是Z的,等偶换个企业版的。20min。
vcar 2004-04-02
  • 打赏
  • 举报
回复
dx吧!
checkyvc6 2004-04-02
  • 打赏
  • 举报
回复
我一直在关注这个问题

今天我将各位说的意思总结了一下,真的可以学到很多东西!在考虑此类问题的时候,思路比以前宽多了。

一句话,我这个新手在这个领域里面还得请各位大哥多多关照,肯定少不了问题要麻烦大家的。
checkyvc6 2004-04-02
  • 打赏
  • 举报
回复
to NCB(tmp)

我这里打不开你的那个opengl的程序,周一去公司了再看!

checkyvc6 2004-04-02
  • 打赏
  • 举报
回复
to niaosuy(解放全人类)(限女性)
我是正在考虑,不过我觉得直接绘制DIB(通过改变象素点的值)
可能比较有希望改进速度.
jsphuang 2004-04-02
  • 打赏
  • 举报
回复
学习一下!
加载更多回复(56)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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