c++ - 设计练习最好使用 mfc

标签 c++ user-interface graphics gdi

我被告知要设计一个有两种变体的画笔程序,一种使用大量空间和少量 CPU,另一种则相反。

这个想法(我被告知 - 所以不确定)是以某种方式保存屏幕快照而不是保存代表绘画之间的增量的 XOR 映射(我不知道它是什么意思)。

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

最佳答案

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

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

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

关于c++ - 设计练习最好使用 mfc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929112/

相关文章:

java - 一段Swing代码如何变成真正的图形应用程序

c++ - 你什么时候会直接改变 std::vector::end() ?

java - 我可以使用什么来代替 JPanel 中的按钮来在所有操作系统中获得相同的外观?

perl - 从多个 perl 文件创建 exe

c++ - 多个对象,不同的行为

opengl - 简单的 3D 图形项目?

python - 使用 boost::python 将虚拟成员函数从 C++ 公开到 Python

c++ - 使用事件杀死线程的时间不一致

c++ - 使用 list 的 DLL 重定向

r - 如何在 Shiny 中单击添加/保留任意数量的绘图层