Ida*_*dan 3 c++ graphics user-interface gdi
有人告诉我设计一个2种变体的画笔程序,一个使用大量空间和小cpu,另一个反之亦然.
这个想法(因为我被告知 - 所以不确定)是以某种方式保存屏幕快照而不是保存XOR地图(我不知道它意味着什么)代表绘画之间的差异.
有人可以建议一种方式或添加相关材料的链接?
放置屏幕截图的明显位置是实现"撤消"命令.简单的memory-hog方法是在每个动作之前拍摄屏幕的快照.如果用户点击"撤消",您可以恢复旧屏幕.
为节省存储空间,只需将两个屏幕之间的差异进行异或,即可保存两个屏幕之间的差异.就其本身而言,这实际上并没有节省任何空间,但它将所有未更改的像素设置为0.为了节省空间,您需要应用某种压缩.鉴于您通常可以预期相当大的区域都为零,因此游程编码可能会快速有效.对于游程编码,您通常会将一串相同的字节转换为两个字节,第一个字节包含运行的长度,第二个字节保存该值.例如,连续75个零将被编码为75 0.
如果您想更进一步,而不是保存XORed位图,您可以考虑使用图元文件.元文件记录在Windows GDI调用级别上执行的操作,因此(例如)如果您在10,100处绘制一个红色的100x200矩形,它将基本上记录 - 即不是二万个像素,它将节省一个标识符,说明要执行的GDI函数,以及提供给该函数的参数.在典型情况下,每执行一次"命令"可能平均大约15-20个字节.同时,它(通常)涉及更多计算 - 例如,如果您绘制一个圆,重新运行图元文件需要重新光栅圆而不是仅存储它生成的位.