ImageSharp:圆角圆角透明度变暗而不是光线

时间:2018-02-08 21:05:36

标签: c# image .net-core imagesharp

我使用ImageSharp库(在NuGet上可用作1.0.0-beta0001)在.NET Core 2.0中进行图像生成和操作,遇到了一些我似乎无法找到方法的东西周围。

this example为基础,我试图围绕白色图像的角落。我发现的是透明的IPath角被打出来最终会使抗锯齿变暗,就好像透明的颜色一样#34;是黑色或灰色(而它根本不应该被认为是任何颜色)。

这是图像的右上象限,用于说明我的意思:

Antialiasing Desired vs Result

我在代码的这一部分尝试了PixelBlenderMode的所有选项,但没有一个产生我之后的内容:

img.Mutate(x => x.Fill(Rgba32.Transparent, corners, new GraphicsOptions(true)
{
  BlenderMode = PixelBlenderMode.Src // enforces that any part of this shape that has color is punched out of the background
}));

1 个答案:

答案 0 :(得分:0)

您看到的问题是像素采样不正确的结果。透明度低的像素过多地影响了各个组件的平均值。

引用以下链接中的一些文字作为示例,因为它可以很好地解释问题。

  

白色区域中的像素具有 RGBA(1.00,1.00,1.00,1.00)的颜色。红色区域中的像素具有 RGBA(1.00,0.00,0.00,0.10)的颜色。如果将这些数字平均在一起,则得到(1.00,0.50,0.50,0.55)。如果您以直接的方式调整图像大小,那就是边界上的典型像素所具有的颜色。   但那种颜色 - 半透明的浅红色 - 是错误的颜色!你可以在边界周围看到一个微弱的红色光环,它不应该在那里:

http://entropymine.com/imageworsener/resizealpha/

修复很简单,在采样之前,必须首先将其值乘以alpha分量进行预乘。

但是,由于调整了生成的图像大小(在最近的夜晚中修复)或填充过程中,我不知道是否发生了此问题。我需要首先看一下示例代码才能确定,因为我不知道你是如何提供源图像的。