标记两张图片之间的差异

时间:2015-09-19 12:52:04

标签: c# colors bitmap

我写了一个小程序,比较两个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;
    }

现在它正常工作,谢谢:)

0 个答案:

没有答案