C# 是否有更好的方法使用ImageSharp将图像裁剪成圆形?

C# 是否有更好的方法使用ImageSharp将图像裁剪成圆形?,c#,.net-core,.net-standard,imagesharp,C#,.net Core,.net Standard,Imagesharp,我正在使用ImageSharp在我的UWP应用程序中进行一些基本的图像编辑,我需要做的一件事是将图像裁剪成一个圆(你可以假设图像已经是一个正方形) 我找不到一个ClipAPI,它可以处理任何其他矩形的东西,所以我想出了以下代码片段: // Image is an Image<Argb32> instance image.Mutate(context => { context.Apply(target => { double half = t

我正在使用ImageSharp在我的UWP应用程序中进行一些基本的图像编辑,我需要做的一件事是将图像裁剪成一个圆(你可以假设图像已经是一个正方形)

我找不到一个
Clip
API,它可以处理任何其他矩形的东西,所以我想出了以下代码片段:

// Image is an Image<Argb32> instance
image.Mutate(context =>
{
    context.Apply(target =>
    {
        double half = target.Height / 2.0;
        unsafe
        {
            fixed (Argb32* p = target.GetPixelSpan())
                for (int i = 0; i < target.Height; i++)
                    for (int j = 0; j < target.Width; j++)
                        if (Math.Sqrt((half - i).Square() + (half - j).Square()) > half)
                            p[i * target.Width + j] = default;
        }
    });
});
//图像是一个图像实例
image.Mutate(上下文=>
{
应用(目标=>
{
双半=目标高度/2.0;
不安全的
{
已修复(Argb32*p=target.GetPixelSpan())
for(int i=0;ihalf)
p[i*target.Width+j]=默认值;
}
});
});
注意:
Square
方法只是一个扩展,它接受一个
double
并返回其平方值


现在,这很好,而且速度相当快,因为我正在处理足够小的图像(比方说,我投票将这个问题作为离题题来结束,因为OP有一个可行的解决方案,但要求有更好的方法。这个问题位于@DanielA.White上。但这并不是一个真正的代码审查问题:我不是要求用户审查并可能改进我的代码,我是要求库作者或更熟悉它的用户,如果有一些内置代码)-在方法中实现了我错过的同样的东西。SKCanvas.DrawRoundRect的半径不是正方形图像长度的一半吗?@mesimplybj可能是,但我特别要求使用ImageSharp解决方案(甚至标记了问题),因为我还使用它在我的应用程序中进行其他图像修改。建议切换到完全不同的库并不是我真正想要的,抱歉。请查看此演示如何使用路径以透明方式填充图像的各个角落。应该会快得多。