Есть ли лучший способ обрезать изображение в круг с помощью ImageSharp? - PullRequest
0 голосов
/ 30 января 2019

Я работаю с 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 пикселей для каждой оси).Этот фрагмент просто устанавливает каждый пиксель, который выходит за пределы круга с радиусом <code>height / 2 с центром в центре изображения, в прозрачный пиксель.

Интересно, не было ли другого более интуитивного метода длясделать то же самое, что я только что пропустил.

Спасибо за вашу помощь!

...