如何在光栅绘图程序中实现撤消?
您正在制作一个绘图程序,例如 Paint。您希望能够撤消/重做画笔描边。你会如何实施这个?
优化速度和内存。
You're making a drawing program like Paint. You want to be able to undo/redo brush strokes. How would you implement this?
Optimize for speed and memory.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 四叉树 记录画布中发生更改的部分的先前状态。
撤消时,替换四叉树中的画布状态。
Use a quadtree to record the previous state of the part of the canvas that changed.
On an undo, replace the canvas state from the quadtree.
创建画布的备份副本。选择完全包围画笔描边的矩形面片。将该补丁中包含的位图保存在新版本和备份中。您现在可以通过位块传输这些更改来撤消或重做笔画。
可能会使用大量内存。
Create a backup copy of the canvas. Choose a rectangular patch that completely surrounds the brush stroke. Save the bitmap contained in that patch in both the new version and the backup. You can now blit these changes to undo or redo the stroke.
May use a lot of memory.