GDI+不支持异或绘图,而使用双缓存方式,避免了图形闪烁,但是速度稍慢,占用内存较多。随着硬件发展,这是一个图形编辑器的趋势;
用 GDI+ 开发矢量图形编辑系统的经验之谈
性能篇
“经过无数次的实验,终于形成了自己的代码风格”:声明两个Bitmap对象,一个用于即时的图形绘制,另一个用于存放已有的图形。在用鼠标绘图的过程中,直接把Bitmap复制到绘图窗口所对应的Graphics上,以提升绘图的速度;
避免用三角函数、平方根、除法;
避免大量使用Structure;
不同的图元有不同的图像拾取算法,一般常用的矢量计算方法可以保证较高的算法效率;
项目的对象建模
要考虑几个方面:确定图元、图元参数的保存和处理、坐标系、图像时拾取。
操作图元参数时,直接把像素值保存在图元参数中比较方便。因为Single类型的“数据还原性”很差,而图形经过旋转、缩放、坐标系变换后,必须用double类型处理,所以可以考虑把所有图元参数全部用double类型处理,损失一些性能但换来了易用性。
http://www.cnblogs.com/bluntsword/archive/2005/08/10/211363.html也提到了GDI+采用float类型带来的精度问题。另外此文提出要解决精度的问题,需要避免使用坐标变换。整个绘制过程中保持
“世界坐标系”和设备坐标系统一,然后自己记录实际坐标与设备坐标的缩放和偏移,然后在绘制时将实际坐标转换为设备坐标。
“自己进行坐标转换也不难,简单的仿射变换”
READ:《GDI+的雷区 》
http://blog.csdn.net/Nightmare/archive/2005/04/22/359092.aspx
GDI+变换之后的坐标被限制在以下范围
x -4194304.0f
y -4194304.0f
width 8388608.0f
height 8388608.0f
如果超出范围,图形画不出,
INST:了解GDI+ 2.0所作的改进
INST:了解“放射变换”作坐标变换
yicone
-The future is worth fighting for.
posted on 2008-06-19 19:54
yicone 阅读(64)
评论(2) 编辑 收藏 所属分类:
Windows, SDK, WinFx