浅谈.Net如何实现找出两幅图片的不同之处

    初学.Net的时候,我就写了个QQ大家来找茬的外挂,其实主要的原理不过就是判断两幅图片不同之处...那时候的实现方法就是两幅图片不停的切换然后眼睛就会看到不同的地方.....那时候很菜,不懂的timer让他实现自动切换,用了很土的方法设置了2个全局热键 F2热键截图,F3切换图片1/图片2...就这样按F3切换来切换去....操作困难,也很没有效率。现在回忆起来也觉得很幼稚.呵呵..说了这么多废话,还是开始进入正题吧!

----------------------------

    一、现在说的第一种方法实现比较两幅图片不同之处,其实也就是上面开场白所说的方法....两幅图片不停的切换出现...当然是用Timer控件,而不是手动(要不就太土了)!容器就用PictureBox来显示图片吧...这种方法代码比较简单代码我就不贴出来....主要是说说思路!

    二、第二种方法,其实就是遍历2张图片的像素,找出不同的地方,然后标记上去... 这种方法与第一种方法相比好处很明显,就是比较直观...第一种方法如果眼力不好或者有色盲的特殊人士,估计就很费力了....下面我贴出一些关键代码

代码
1 private void ImageCompare()
2 {
3
4 Bitmap firstImage = new Bitmap("1.jpg");
5 Bitmap secondImage = new Bitmap("2.jpg");
6 bool A = true, B = true;
7 string firstPixel;
8 string secondPixel;
9
10 Graphics g = Graphics.FromImage(firstImage);
11 //消除锯齿
12 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
13 //填充背景颜色
14 // Brush br = new SolidBrush(Color.Red);
15
16 if (firstImage.Width == secondImage.Width
17 && firstImage.Height == secondImage.Height)
18 {
19 for (int i = 0; i < firstImage.Width; i++)
20 {
21 for (int j = 0; j < firstImage.Height; j++)
22 {
23   if (!firstImage.GetPixel(i, j).Equals(secondImage.GetPixel(i, j)))
24 { //设置不同的地方为红色
25 firstImage.SetPixel(i, j, Color.Red);
26 }
27                     }
28                 }

29 }
30          }

------------------------

以上2种方法有需要注意的地方:

      1、2副图片的大小要一样;

      2、2副图片截图的位置不要歪了,一定要精确。第一种方法歪了一些勉强可以识别.但是对第二种方法那简直就是杯具了...

      3、上面2个方法是用来找出图片的不同之处,如果用于比较两幅图片是否相同,效率都比较低.不建议使用...

----------------------------

      目前我暂时只想到用这2种方法来找出二副图片的不同之处,第一种方法对制作大家来找茬的外挂效率比较高(前提是眼力不要太差),第二种方法运算速度有点慢,主要因为要遍历图片的像素这个过程需要多的时间 .....估计改进下算法就会好很多....当然光会对比图片对于制作大家来找茬的外挂是远远不够的....有机会的话我就说说整个大家来找茬外挂的制作方法!

原文地址:https://www.cnblogs.com/cracker/p/Compare_Pic.html