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

时间:2019-01-30 14:33:09

标签: c# .net-core .net-standard imagesharp

我正在与ImageSharp一起在我的UWP应用中进行一些基本的图像编辑,而我需要做的一件事情就是将图像裁剪成一个圆形(您可以假定图像已经是正方形)。 / p>

我找不到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;
        }
    });
});

注意: Square方法只是采用double并返回其平方值的扩展。

现在,这可以正常工作,并且由于我正在处理足够小的图像(例如,每个轴<= 250像素),因此速度相当快。此代码段仅将位于图像中心的半径height / 2的圆以外的每个像素设置为透明像素。

我想知道是否没有一种更直观的方法来做同样的事情,而我只是错过了。

谢谢您的帮助!

0 个答案:

没有答案