无法用Magick.Net取代颜色

时间:2017-03-09 16:05:25

标签: c# imagemagick magick.net imagemagick.net

我尝试用绿色替换白色,但下面的代码不会改变颜色。

代码:

private static MagickImage ChangeWhiteColor(MagickImage Image, Color TargetColor)
{
    Image.Opaque(MagickColor.FromRgb((byte)255, (byte)255, (byte)255), 
        MagickColor.FromRgb(TargetColor.R,
        TargetColor.G,
        TargetColor.B));
    return Image;
}

UPD 我尝试更改复合引力和运算符,但没有任何变化。

我应该做什么?

1 个答案:

答案 0 :(得分:2)

如果您需要更换完美的白色(R = 255,G = 255,B = 255或#ffffff,如果您愿意的话),您的代码就可以使用。

如果您尝试将类似(但不完全相同)的颜色替换为白色,则可以使用ColorFuzz来引入容差。

要实现此目的,您可以在方法中添加一个新的fuzz参数,如下所示:

private static MagickImage ChangeWhiteColor(MagickImage Image, Color TargetColor, int fuzz)
{
    Image.ColorFuzz = new Percentage(fuzz);
    Image.Opaque(MagickColor.FromRgb((byte)255, (byte)255, (byte)255), 
        MagickColor.FromRgb(TargetColor.R,
        TargetColor.G,
        TargetColor.B));
    return Image;
}

例如考虑以下包含三个白色矩形的图像。在每个形状下,我报告了RGB值。左边的第一个矩形填充纯白色,而第二个和第三个矩形填充非常类似于白色的浅灰色:

enter image description here

您的原始代码只会替换左侧的第一个白色矩形(因为模糊默认值为0%):

enter image description here

使用fuzz=2运行修改后的代码将替换第一个和第二个白色矩形,但不会替换第三个:

enter image description here

使用fuzz=6运行修改后的代码将替换所有三个白色矩形:

enter image description here

您可以调整fuzz值(百分比)以匹配您需要替换的颜色。

有关fuzz here的更多信息。