创建位图以逐个像素比较两个图像

时间:2012-06-09 13:06:31

标签: c#

我试图按像素比较两个图像。 我在Google上搜索了位图,但我没有清楚它。

我的代码显示错误Parameter is not valid

我试过这个;

var a = new Bitmap(imageurl);

但它不起作用。

我也推荐这个网站进行图像比较:

http://www.c-sharpcorner.com/uploadfile/prathore/image-comparison-using-C-Sharp/

我尝试过:

但在此行显示错误parameter is not valid

var img1 = new Bitmap(fileone);
var img2 = new Bitmap(filetwo);

我在这两个变量中存储了路径,

fileone=C:\image\a.jpg:
filetwo=c:\image\b.jpg;

var img1 = new Bitmap(fileone);
var img2 = new Bitmap(filetwo);

if (img1.Width == img2.Width && img1.Height == img2.Height)
{
   for (int i = 0; i < img1.Width; i++)
   {
       for (int j = 0; j < img1.Height; j++)
       {
           img1_ref = img1.GetPixel(i, j).ToString();
           img2_ref = img2.GetPixel(i, j).ToString();

           if (img1_ref != img2_ref)
           {
              count2++;
              flag = false;
              break;
           }

           count1++;
        }
        // progressBar1.Value++;
    }

    if (flag == false)
       Response.Write("Sorry, Images are not same , " + count2 + " wrong pixels found");
    else
       Response.Write(" Images are same , " + count1 + " same pixels found and " + count2 + " wrong pixels found");
}
else
   Response.Write("can not compare this images");

this.Dispose();

2 个答案:

答案 0 :(得分:2)

fileone=C:\image\a.jpg:
filetwo=c:\image\b.jpg;

那是无效的C#。你引用文件名的方式非常重要,因为反斜杠是一个转义字符。

也许您的真实代码看起来像

fileone="C:\image\a.jpg";
filetwo="C:\image\b.jpg";

然后\b变成退格符,而不是你想要的。您可以使用@ -literal来避免转义处理:

fileone=@"C:\image\a.jpg";
filetwo=@"C:\image\b.jpg";

答案 1 :(得分:0)

如果您收到错误

var img1 = new Bitmap(fileone);

很可能您的fileone不存在,请确保C:\image\a.jpg存在。