我正在与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
的圆以外的每个像素设置为透明像素。
我想知道是否没有一种更直观的方法来做同样的事情,而我只是错过了。
谢谢您的帮助!