【问题标题】:How to freehand erase on a SKCanvasView?如何在 SKCanvasView 上徒手擦除?
【发布时间】:2020-11-06 08:06:02
【问题描述】:

我正在尝试在 Xamarin.Forms 中制作绘图应用程序。我能够绘制路径。我的问题是,当用户尝试在绘图上擦除时,如何删除部分路径。我尝试了以下方法:

if (IsEraseClicked)
{
    switch (args.Type)
    {
        case TouchActionType.Pressed:
            if (!inProgressPaths.ContainsKey(args.Id))
            {
                SKPath path = new SKPath();
                path.MoveTo(ConvertToPixel(args.Location));
                inProgressPaths.Add(args.Id, path);
                UpdateBitmap();
            }
            break;

        case TouchActionType.Moved:
            if (inProgressPaths.ContainsKey(args.Id))
            {
                SKPath path = inProgressPaths[args.Id];
                path.LineTo(ConvertToPixel(args.Location));
                UpdateBitmap();
            }
            break;

        case TouchActionType.Released:
            if (inProgressPaths.ContainsKey(args.Id))
            {
                if (completedPaths.Contains(inProgressPaths[args.Id]))
                {
                    completedPaths.Remove(inProgressPaths[args.Id]);
                    inProgressPaths.Remove(args.Id);
                    UpdateBitmap();
                }
            }
            break;

        case TouchActionType.Cancelled:
            if (inProgressPaths.ContainsKey(args.Id))
            {
                inProgressPaths.Remove(args.Id);
                UpdateBitmap();
            }
            break;
    }
}

我正在使用 SkiaSharp 库。

【问题讨论】:

  • 您想擦除特定路径,还是想要更多像绘图程序中的手绘橡皮擦?
  • 是的,手绘,用户可以在他们想要的地方删除或擦除。
  • 只是像平常一样捕获路径,但是将颜色设置为画布的背景色
  • 我想过这个,但我不确定,这是不是正确的方法。因为这样会添加一个新路径,这会增加列表的大小,可能会影响内存。
  • 我已经做到了,效果很好。路径是一个非常小的数据结构。任何其他方法仍然需要捕获类似路径的结构以允许徒手。

标签: xamarin drawing skiasharp eraser


【解决方案1】:

只需在点击擦除时将 SKPaint 更改为这些设置即可。

paint.BlendMode = SKBlendMode.Src;
paint.Color = SKColors.Transparent;

并返回到单击铅笔的时间。

paint.BlendMode = SKBlendMode.SrcOver;
paint.Color = SKColors.Red;

【讨论】:

  • 这个方法你试过了吗?
  • 我试过了,但它对我不起作用,请你分享完整的绘图和橡皮擦。当我变回红色时,它也会将删除的区域变为红色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多