设计练习最好使用mfc

时间:2009-12-18 16:07:55

标签: c++ user-interface graphics gdi

我被告知要设计一个2个变体的画笔程序,一个使用大量空间和小cpu,另一个反之亦然。

这个想法(因为我被告知 - 所以不确定)是以某种方式保存屏幕快照而不是保存XOR地图(我不知道它意味着什么)代表绘画之间的差异。

有人可以建议一种方法或添加相关材料的链接吗?

1 个答案:

答案 0 :(得分:5)

使用屏幕截图的明显位置是实现“撤消”命令。简单的memory-hog方法是在每个动作之前拍摄屏幕的快照。如果用户点击“撤消”,您可以恢复旧屏幕。

为节省内存空间,您只需将两个屏幕之间的差异保存在一起即可。就其本身而言,这实际上并没有节省任何空间,但它将所有未更改的像素设置为0.为了节省空间,您需要应用某种压缩。鉴于您通常可以预期相当大的区域都为零,因此游程编码可能会快速有效。对于游程编码,您通常会将一串相同的字节转换为两个字节,第一个字节包含运行的长度,第二个字节保存该值。例如,连续75个零将编码为75 0

如果您想更进一步,而不是保存XORed位图,您可以考虑使用图元文件。元文件记录在Windows GDI调用级别上执行的操作,因此(例如)如果您在10,100处绘制一个红色的100x200矩形,它将基本上记录 - 即不是二万个像素,它将节省一个标识符,说明要执行的GDI函数,以及提供给该函数的参数。在典型情况下,每执行一次“命令”可能平均大约15-20个字节。同时,它确实(通常)涉及更多的计算 - 例如,如果你画一个圆圈,重新运行一个图元文件需要重新调整圆圈,而不是只存储它产生的位。