Skiasharp Undo/Redo 按钮

Skiasharp Undo/Redo buttons

我有一个 SkiaSharp canvas 带有位图,您可以 move/rotate/scale,但现在我想在canvas,但我不知道如何开始。我需要存储每个更改或其他内容......

有人可以帮助我走上正确的道路吗?

https://docs.microsoft.com/el-gr/dotnet/api/skiasharp.skcanvas.restoretocount?view=skiasharp-1.68.1#SkiaSharp_SKCanvas_RestoreToCount_System_Int32_对你有用吗?

这可能意味着您需要 运行 一个 save() 的每个操作,我不知道 space 需要多少内存。

这个 save 和从计数恢复是我能找到的最接近撤消的东西。

如果你想添加重做,那么这是一件更复杂的事情,因为你需要解决如果我撤消某些事情会发生什么,再做一次改变然后 freddo 重做撤消的操作。

如果您只是支持表面的变换(旋转、缩放、平移),那么您只需要存储 TotalMatrix

https://docs.microsoft.com/dotnet/api/skiasharp.skcanvas.totalmatrix

在每次更改时,将其存储在某种列表中的某处。然后,到 undo/redo,只需使用 SetMatrix:

https://docs.microsoft.com/dotnet/api/skiasharp.skcanvas.setmatrix

这可能就是您要找的。

SaveRestore 可能看起来很诱人,但它们更适合当前的转换——保存状态、转换然后恢复。这允许在绘制单个图像时不那么复杂的数学运算。