Magick.NET 如何使用 .ColorFuzz 作为图像比较的像素容差

Magick.NET How to use .ColorFuzz as pixel tolerance for image comparison

我是图片对比区的新手

我正在使用C#和Magick.NET(Magick.NET-Q16-AnyCPU版本:7.14.5)来对比截图。

使用 .ColorFuzz 我想实现某种像素容差,以忽略屏幕截图差异。

这是我的代码:

double fuzzLevel = 0;

MagickImage baseHeaderView = new MagickImage(@"C:\githubActual.png");
MagickImage actualHeaderView = new MagickImage(@"C:\githubBase.png");
MagickImage diffView = new MagickImage();

baseHeaderView.ColorFuzz = (Percentage)fuzzLevel;
baseHeaderView.Compare(actualHeaderView, ErrorMetric.Absolute, diffView);

baseHeaderView.Composite(diffView, CompositeOperator.Over);
Console.WriteLine(baseHeaderView.GetAttribute("distortion"));
baseHeaderView.Write(@"C:\diffView.png");

这是我的 base and actual 屏幕截图。

This 是 fuzzLevel 变量 = 0 时的差异图像。 在这种情况下,baseHeaderView.GetAttribute("distortion") 将 return 614 个不同的像素。

当我将 fuzzLevel 更改为 75 时,baseHeaderView.GetAttribute("distortion") returns 0 个不同的像素,但 diff 图像仍然包含 highlighted differences

所以,我的问题是,为什么当失真等于 0 时,diff 图像中仍然存在突出显示的差异。我做错了什么,或者这是预期的行为?

可以更改上面的代码,所以当失真为 0 时,diff 图像将不包含任何突出显示的差异?

您似乎在 ImageMagick 库中发现了错误。 Magick.NET 的下一版本将解决您的问题。下次随时在这里打开一个问题:https://github.com/dlemstra/Magick.NET/issues