看看我跟visual graphi作者的对画吧
Me: 看了你的作品,感觉上应该是很不错的,可为什么在市场上没什么听说,是市场操作不
够还是怎样,可惜,或是其它原因(我不是想投资,我是一个PR,只是有感于中国软件),
我是搞数据库的,但爱钻牛角尖,最近被一个问题困住了,想请教一下,就是关于图片的
无级undo的实现,听DFW上说要什么大量的action来实现,你是如何实现的,能轻轻点一下
吗?
He: 这个不难,做两个动态数组(一个是Undo,一个是Redo),每变化一次,就把变化的类型和
变化量加入这个数组,就行了.当然,为了完整,每次先要放一个START标志,然后再放一个END
标志.Undo的时候,反其道而行,并打开Redo的动态数组,Redo的时候,打开的是Undo的动态数
组.动态数组有一个是激活的.
中国软件的希望在和传统产业的相融上,个人的成果不重要。
me: 说起来容易,可是真正的要如何融合,好像没人能找到这条出路啊!
你的意思是说每次做什么操作记录起来,然后再反其道而为,好像不对吧,因为我看PS
里的比如一个大步骤可能要0.5s,可是在undo里却很快,听DFW上说是用堆栈做的,并且
如果你那种方法步骤越多,就无法实现直接到达哪步,而要一步一步undo了吗?如果有些
操作是随机的时候(如有些像素是随机计算的),你如何做操作记录呢?
he: 我说的动态数组,对了,其实就是堆栈.
你纪录的内容应该这样,比如,目标是多边形,移动了一个顶点,你只需要纪录该顶点移动
前的坐标.比如移动整个多边形,你只需要纪录移动的幅度值,直接跳到历史的某一步不难
,当然要一步一步Undo了,比起原始的操作来,Undo当然要快点(因为不需要复杂的计算和
判断).
me: 还是不太明白,如果能再让我跳出来的话,真是太感谢了!
如:
原图
经步骤1:花0.1s 存入动态数组数据1
步骤2:花0.5s 存入动态数组数据2
步骤3:花1.0s 存入动态数组数据3
步骤4:花1.5s 存入动态数组数据4
此时原图已经四步改变变成了图4了,就是如果要直接恢复到图1步状态,你
的意思是否是从图四一步一步恢复到图1呢,这样恢复花的消耗不是要后三步之和吗?就
是说要花1.5 + 1.0 + 0.5 = 3s吗?并且如果说记入每步操作前的信息好像也不太合适
吧,如果一个图很大,那么一次记录改变了其所有像素的值,总不可能把这些像素改变
前的值放入数据中吧,这样动态数组不是会太大了,我想PS在做这个的时候应该只是将
操作类型放入其中吧,比如说只记录些次操作的名称,更改值等吧,不可能将改前的值
放入吧,并且看DFW们的讨论,PS在5.0还没实现无级undo功能,在6.0才实现,应该经过
很复杂的数据压缩才能做到你所说的那种堆栈来做吧,是不是?
按照你看将来Java + Linux有前途吗?我正在想是学J2EE还是J2ME,给个建议,OK
he: Photoshop在Undo的时候很快吗?我不知道?如果是,估计是把整个图像保存了.如果
只是保存步骤的话,应该是三秒才对(当然要免除在屏幕上画图的过程,在内存画图)
多学点知识,不局限于JAVA+LINUX,要了解多种技术,知道各种技术的优缺点.
me: 想啊,可是一个人的东东是有限的,我比起周围的人很努力的学了,但还是难啊
ps的历史路径很快,你应该有ps吧,拿来试试就知道了,如果整个图保存,那不可
能,如果操作一百步不就要保存一百个图了,可我看ps好像没有添加什么资源占用,应
该不是这样实现的,好了,不打搅你了,谢谢了这几次的讨论,如果你找到更好的方法
,请告诉我一声,祝好运,新年快乐啊!
还没完。。。
希望张兄不介意在下贴出来