代码之家  ›  专栏  ›  技术社区  ›  Idan

设计练习最好使用MFC

  •  3
  • Idan  · 技术社区  · 15 年前

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

    这个想法(如我所知——所以不确定)是保存屏幕快照,而不是保存XOR映射(我不知道这意味着什么),后者代表了绘画之间的增量。

    有人能提出建议或添加相关材料的链接吗?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Jerry Coffin    15 年前

    放置屏幕截图的最明显的地方是实现一个“撤消”命令。简单的内存占用方法是在每次操作之前对屏幕进行快照。如果用户点击“撤消”,您可以恢复旧屏幕。

    为了节省内存空间,您只需将两个屏幕进行异或运算,就可以节省两个屏幕之间的差异。它本身并不节省任何空间,但它将所有不变的像素设置为0。为了节省空间,您需要应用某种压缩。考虑到您通常可以期望相当大的区域都为零,运行长度编码可能是快速有效的。对于运行长度编码,通常将相同字节的字符串转换为两个字节,第一个字节保持运行长度,第二个字节保持值。例如,一行中的75个零将被编码为 75 0 .

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