代码之家  ›  专栏  ›  技术社区  ›  Sergio0694

有没有更好的方法可以用ImageSharp将图像裁剪成圆形?

  •  2
  • Sergio0694  · 技术社区  · 7 年前

    我正在使用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;
            }
        });
    });
    

    注: 那个 Square 方法只是一个扩展,需要 double 并返回其平方值。

    现在,这很好,而且速度相当快,因为我正在处理足够小的图像(比如,每个轴的<=250像素)。这个片段简单地设置了每个落在圆外的像素的半径 height / 2 ,以图像中心为中心,以透明像素为中心。

    我想知道是否还有其他更直观的方法来做同样的事情,我只是错过了。

    谢谢你的帮助!

    0 回复  |  直到 7 年前