我有一个带有位图的SkiaSharp canvas,您可以使用move/rotate/scale,但是现在我想在画布上创建一个Undo/Redo函数,但是我不知道如何开始。我要把所有的零钱都存起来.
有人能帮我走上正确的道路吗?
发布于 2019-12-28 17:24:46
如果您只是支持曲面的转换(旋转、缩放、平移),那么您所需要的就是存储TotalMatrix。
https://learn.microsoft.com/dotnet/api/skiasharp.skcanvas.totalmatrix
对于每一个变化,拿着它,商店就在某种列表中的某个地方。然后,要撤消/重做,只需使用SetMatrix
https://learn.microsoft.com/dotnet/api/skiasharp.skcanvas.setmatrix
这可能就是你要找的。
Save和Restore看起来很诱人,但它们更适合当前的转换--保存状态、转换然后恢复。这允许在绘制单个图像时不太复杂的数学。
发布于 2019-12-08 07:02:07
这可能意味着,在每个操作中,您都需要运行一个save(),而我不知道在内存方面需要多少空间。
这个save和count还原是我能找到的最接近撤销的东西。
如果您想要添加一个重做,那么这将是一个更复杂的事情,因为您需要解决如果我撤消某件事情会发生什么,进行另一次更改,然后重新执行取消的操作。
https://stackoverflow.com/questions/59233006
复制相似问题