【问题标题】:Skiasharp Undo/Redo buttonsSkiasharp 撤消/重做按钮
【发布时间】:2019-12-29 02:34:04
【问题描述】:

我有一个带有位图的 SkiaSharp 画布,您可以 move/rotate/scale,但现在我想在画布上创建一个 Undo/Redo 函数,但我不知道如何开始。我需要存储所有更改或其他内容.....

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

【问题讨论】:

    标签: c# xamarin xamarin.forms xamarin.android skiasharp


    【解决方案1】:

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

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

    在每次更改时,将其存储在某种列表中的某个位置。然后,要撤消/重做,只需使用SetMatrix

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

    这可能就是你要找的东西。

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

    【讨论】:

      【解决方案2】:

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

      这可能意味着在每个操作中您都需要运行save(),我不知道在内存方面需要多少空间。

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

      如果你想添加一个重做,那么这是一件更复杂的事情,因为你需要解决如果我撤消某些东西会发生什么,进行另一个更改和 freddo 重做已撤消的操作。

      【讨论】:

        猜你喜欢
        • 2021-05-23
        • 2021-04-12
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 2019-09-08
        • 1970-01-01
        相关资源
        最近更新 更多