我写了一个小程序,比较两个png并保存其中一个与两张图片之间的显着差异。
class Program
{
static void Main(string[] args)
{
string a = @"C:\Users\Florian\Desktop\Projects\C# selbst\Compare\Compare\bild1.jpg";
string b = @"C:\Users\Florian\Desktop\Projects\C# selbst\Compare\Compare\bild2.jpg";
Bitmap bl = new Bitmap(@a);
Bitmap br = new Bitmap(@b);
bool gleich = true;
if (bl.Size != br.Size)
{
gleich = false;
}
else
{
for (int x = 0; x < bl.Width; x++)
{
for (int y = 0; y < bl.Height; y++)
{
if (bl.GetPixel(x, y) != (br.GetPixel(x, y)))
{
gleich = false;
br.SetPixel(x, y, System.Drawing.Color.Red);
}
}
}
}
br.Save(@"C:\Users\Florian\Desktop\myBitmap.png", ImageFormat.Png);
if (gleich)
{
Console.WriteLine("gleich");
}
else
{
Console.WriteLine("unterschiedlich");
}
Console.ReadLine();
}
}
程序在这种意义上起作用,它可以比较我刚刚复制的图片(真实)或我更改像素的图片(假)。但是新保存的png几乎将整个画面标记为红色而不仅仅是我改变的像素。我做错了吗?
编辑:在这个问题的答案很好之后,我为比较增加了一些容忍度:
private static bool TestPixel(Color c1, Color c2)
{
int toleranz = 5;
int rot = Math.Abs(c1.R - c2.R);
int grün = Math.Abs(c1.G - c2.G);
int blau = Math.Abs(c1.B - c2.B);
if (rot > toleranz || blau > toleranz || grün > toleranz)
return true;
return false;
}
现在它正常工作,谢谢:)