【发布时间】:2019-12-29 02:34:04
【问题描述】:
我有一个带有位图的 SkiaSharp 画布,您可以 move/rotate/scale,但现在我想在画布上创建一个 Undo/Redo 函数,但我不知道如何开始。我需要存储所有更改或其他内容.....
有人可以帮助我走上正确的道路吗?
【问题讨论】:
标签: c# xamarin xamarin.forms xamarin.android skiasharp
我有一个带有位图的 SkiaSharp 画布,您可以 move/rotate/scale,但现在我想在画布上创建一个 Undo/Redo 函数,但我不知道如何开始。我需要存储所有更改或其他内容.....
有人可以帮助我走上正确的道路吗?
【问题讨论】:
标签: c# xamarin xamarin.forms xamarin.android skiasharp
如果您只是支持表面的转换(旋转、缩放、平移),那么您只需要存储 TotalMatrix。
https://docs.microsoft.com/dotnet/api/skiasharp.skcanvas.totalmatrix
在每次更改时,将其存储在某种列表中的某个位置。然后,要撤消/重做,只需使用SetMatrix:
https://docs.microsoft.com/dotnet/api/skiasharp.skcanvas.setmatrix
这可能就是你要找的东西。
Save 和 Restore 可能看起来很诱人,但它们更适合当前的转换 - 保存状态,转换然后恢复。这允许在绘制单个图像时减少复杂的数学运算。
【讨论】:
这可能意味着在每个操作中您都需要运行save(),我不知道在内存方面需要多少空间。
这个save 和从计数中恢复是我能找到的最接近撤消的东西。
如果你想添加一个重做,那么这是一件更复杂的事情,因为你需要解决如果我撤消某些东西会发生什么,进行另一个更改和 freddo 重做已撤消的操作。
【讨论】: