Skiasharp Undo/Redo 按钮
Skiasharp Undo/Redo buttons
我有一个 SkiaSharp canvas 带有位图,您可以 move/rotate/scale
,但现在我想在canvas,但我不知道如何开始。我需要存储每个更改或其他内容......
有人可以帮助我走上正确的道路吗?
这可能意味着您需要 运行 一个 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
这可能就是您要找的。
Save
和 Restore
可能看起来很诱人,但它们更适合当前的转换——保存状态、转换然后恢复。这允许在绘制单个图像时不那么复杂的数学运算。
我有一个 SkiaSharp canvas 带有位图,您可以 move/rotate/scale
,但现在我想在canvas,但我不知道如何开始。我需要存储每个更改或其他内容......
有人可以帮助我走上正确的道路吗?
这可能意味着您需要 运行 一个 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
这可能就是您要找的。
Save
和 Restore
可能看起来很诱人,但它们更适合当前的转换——保存状态、转换然后恢复。这允许在绘制单个图像时不那么复杂的数学运算。