VC++如何提高画图效率???
大家好:
现在正在做的项目是一些画图工作,画图量十分的巨大。所以想来向大家学习下VC中如何提高画图效率的技巧。
我的画图每次屏幕改变后都要重新绘制的。所以效率需要好好考虑。
在我的画图过程中,主要的绘制工作无非就是画点,画线,moveto,lineto,实色填充一个区域,透明填充一个区域,花式填充一个区域,写文本字符串等。还有的就是一些坐标的数值计算。每一个小过程都很简单,就是总的绘制量巨大。所以累加时间很长。希望得到提升。目前还没做任何的代码优化。
希望大家有什么经验技巧都来说说。
比如:
我在某一个小绘制函数中这样生成一个画笔:
CPen pen(PS_SOLID,1,RGB(255,0,0));
dc.selectobject(pen);
...
那么我后面需要对这个pen的内存空间进行释放吗?还是他自己在这个函数结束后就自己释放?
连续的大量的moveto和lineto,夹杂着数值计算会不会影响绘图速度?(就是moveto的数值是动态计算的。)?
设备环境DC以及位图等资源什么时候需要释放,什么时候他自己会释放?
等等这些东西。
[解决办法]
函数中
CPen pen(PS_SOLID,1,RGB(255,0,0));
这种方法就不需要释放,函数结束后会自动释放,因为pen是个局部变量。
需要注意的是:FONT很多时候不能用局部变量。
[解决办法]
要考虑裁减(clip)以减少画图操作
[解决办法]
画图是累 程序员考虑的不是如何偷工减料 那个没法的 每步都得自己做呢
要考虑的是如何优化程序效率 比如楼上说的裁剪你截取图片的范围
然后局部变量是保存在栈内存里面的 它是函数结束时自动释放
[解决办法]
如何优化绘图质量与效率,是图像图形软件一直面对的问题,包括当前的CAD/CAM都必须要解决这些!我也说说我的看法!
首先,要会使用双缓冲!这个不仅仅是提高画图质量(比如避免闪烁什么的),在双缓冲基础上,可以提高画图效率。
其次,将双缓冲扩充,变成三缓冲或者更多缓冲!提高效率(不仅仅是质量了)。
我们常用的画图数据,有具体的实体等数据,还有一些是中间操作数据,比如鼠标拖动,拖动过程的目标A就是中间数据,拖动完成后,中间数据就变成具体的实体等数据B。如果我们仅仅用双缓冲来实现,那么,拖动过程,所有的具体的实体数据B就需要重画,然后再重画中间的数据A;但是,如果改成三缓冲来实现,我们可以这样做,每次实体数据B改变的时候,我们在第一个缓冲M1中只画数据B;第二个缓冲M2用于显示中间数据A,当然,在显示前先拷贝M1缓冲,然后,再画数据A;第三个缓冲也就是最后一个缓冲M3是将M2贴出显示用的,这是必须的!这样,你每次有中间数据改变的时候(比如拖动过程、选择过程),只需要重新画一些M2,然后显示;在实体数据改变的时候,你重新画一下M1(当然,M1画完后,M2也需要重新画,这是一个层次关系),最后显示!
这只是基本的用法,你可以根据具体的需要来改变使用更多的缓冲!