C# 滑雪道

C# 滑雪道,c#,.net,.net-core,skiasharp,C#,.net,.net Core,Skiasharp,我正在使用System.Drawing进行一些图像编辑,现在将所有内容移植到SkiaSharp,以便在Linux/.NET内核上使用它。一切都很好,除了我还没有找到一种方法,以编程方式给图像圆角 我编写了一些代码,它依赖于以圆的形式绘制路径,然后尝试将路径的外部着色为透明。但这不起作用,因为似乎有多个层,使上层的部分透明并不能使图像的整个区域(所有层)透明。这是我的密码: public static SKBitmap MakeImageRound(SKBitmap image) { SK

我正在使用System.Drawing进行一些图像编辑,现在将所有内容移植到SkiaSharp,以便在Linux/.NET内核上使用它。一切都很好,除了我还没有找到一种方法,以编程方式给图像圆角

我编写了一些代码,它依赖于以圆的形式绘制路径,然后尝试将路径的外部着色为透明。但这不起作用,因为似乎有多个层,使上层的部分透明并不能使图像的整个区域(所有层)透明。这是我的密码:

public static SKBitmap MakeImageRound(SKBitmap image)
{
    SKBitmap finishedImage = new SKBitmap(image.Width, image.Height);

    using (SKCanvas canvas = new SKCanvas(finishedImage))
    {
       canvas.Clear(SKColors.Transparent);
       canvas.DrawBitmap(image, new SKPoint(0, 0));
       SKPath path = new SKPath();
       path.AddCircle(image.Width / 2, image.Height / 2, image.Width / 2 - 1f);
       path.FillType = SKPathFillType.InverseEvenOdd;
       path.Close();
       canvas.DrawPath(path, new SKPaint {Color = SKColors.Transparent, Style = SKPaintStyle.Fill });
       canvas.ResetMatrix();              
       return finishedImage;
    }
}
如果这是糟糕的代码,我很抱歉,这是我第一次使用C#进行图像编辑,因此我也是SkiaSharp的绝对初学者。我修改了一个系统。我从中得到了绘图代码

我也看了一下这个。它显示了使用路径进行剪辑,但我还没有能够让它工作

总之:我正在寻找一种方法,使图像/画布的所有层在某些区域透明。


非常感谢您的帮助!:D

我认为可以通过设置
SPaint.BlendMode=SKPaintBlendMode.Src
来实现这一点。这意味着在绘制画布时,它只需使用源颜色,并替换现有颜色

你到底在做什么

canvas.DrawPath(路径,新的SKPaint{Color=SKColors.Transparent});
就是拿起一把刷子,把它浸在透明的油漆里,然后画画。所以你什么也没看到。油漆是透明的

但是,您更想做的是在绘制之前进行剪辑:

canvas.Clear(SKColors.Transparent);
//为图片创建圆
var path=新的SKPath();
AddCircle(image.Width/2,image.Height/2,image.Width/2-1f);
//告诉画布不要画在圆圈外
canvas.ClipPath(路径);
//绘制位图
DrawBitmap(图像,新的SKPoint(0,0));