windows画图的撤销重做是如何实现的?

tracing 2015-03-20 05:06:04
如题,这个画图应该是直接操作图片的像素的,所以不要提设置画笔模式的做法,毕竟不是在DC上画图
...全文
843 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2015-03-24
  • 打赏
  • 举报
回复
windows的画图是操作DC的. 有一个内存DC. 应该是这样实现的. 每次画的图是一个图元, 使用一个列表保存起来. 画图软件在paint的时候, 就遍历列表把每个图元都绘制到"画布"上显示出来. 撤销就是把它从列表中删除而以.
tracing 2015-03-24
  • 打赏
  • 举报
回复
引用 19 楼 beijiguangyong 的回复:
http://goobbe.com/questions/722982/undo-operation-in-picturebox-to-undo-drawn-rectangles-in-c-net
protected void btnUndo_Click(object sender, EventArgs e) { var action = eventStack.pop(); // ignore action as we just want to remove it // now redraw your PictureBox with what's left in the Stack } 这个就是我说的方法,把保存的操作重新做了一遍,这种是可以实现,但比较耗时。 赵4老师的例子跟这个一样吗?
schlafenhamster 2015-03-23
  • 打赏
  • 举报
回复
所以"保存每一步的结果可能好些,"
tracing 2015-03-23
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
你这个简单的可以: "如果要撤销第三步" 重做第2步. ;;; 保存每一步的结果可能好些,
重做第二步不一定就能把第三步覆盖掉,填充我只是举个例子,如果第二步和第三步都是矩形呢,两个矩形又没有交集,重做第二步的话,第三步还在
  • 打赏
  • 举报
回复
http://www.pudn.com/downloads138/sourcecode/windows/bitmap/detail591330.html 这个例子给你参考,不完善。
tracing 2015-03-23
  • 打赏
  • 举报
回复
引用 15 楼 zhao4zhong1 的回复:
搜“命令模式”
直接说解决方法把,模式这个词太沉重了
赵4老师 2015-03-23
  • 打赏
  • 举报
回复
搜“命令模式”
schlafenhamster 2015-03-23
  • 打赏
  • 举报
回复
"保存每一步比较耗内存,步数也非常有限" 保存每步差可以省mem, 但花 time
一桶姜山 2015-03-23
  • 打赏
  • 举报
回复
要速度就费内存,要内存就费时间啊,鱼和熊掌
tracing 2015-03-23
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
所以"保存每一步的结果可能好些,"
有更好的方法吗,保存每一步比较耗内存,步数也非常有限
schlafenhamster 2015-03-22
  • 打赏
  • 举报
回复
"Paint" 也只能undo 几次, 100次都不到, 你要undo 1000次? 还不如 叫用户 重做.
tracing 2015-03-21
  • 打赏
  • 举报
回复
引用 5 楼 likfeng 的回复:
每次操作都会以某种数据结构保存起来 绘图就是按照操作顺序绘制 撤销、重做就是操作列表的增删
我也是想用这种思路,但是undo不好实现,redo比较简单,比如这个例子 第一步:填充画布为红色 第二步:填充画布为蓝色 第三步:填充画布为绿色 如果要撤销第三步,如何操作呢?如果把第三步之前的都重新做一遍是可以实现,但比较浪费时间
worldy 2015-03-21
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
你这个简单的可以: "如果要撤销第三步" 重做第2步. ;;; 保存每一步的结果可能好些,
一个操作很占内存,已经做了1000步了,怎么办?
schlafenhamster 2015-03-21
  • 打赏
  • 举报
回复
你这个简单的可以: "如果要撤销第三步" 重做第2步. ;;; 保存每一步的结果可能好些,
likfeng 2015-03-20
  • 打赏
  • 举报
回复
每次操作都会以某种数据结构保存起来 绘图就是按照操作顺序绘制 撤销、重做就是操作列表的增删
wshcdr 2015-03-20
  • 打赏
  • 举报
回复
要专门去实现这套 UNDO/REDO 的框架的
tracing 2015-03-20
  • 打赏
  • 举报
回复
版主帮我改下标题,改成windows自带画图工具的撤销和重做是如何实现的?
tracing 2015-03-20
  • 打赏
  • 举报
回复
直接操作位图的点,然后把位图显示出来
加载更多回复(1)

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧