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

如题所述

第1个回答  2022-10-28

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

  

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

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

  代码

      private void ImageCompare()

            {

  

                Bitmap firstImage = new Bitmap( jpg );

                Bitmap secondImage = new Bitmap( jpg );

                bool A = true B = true;

                string firstPixel;

                string secondPixel;

  

                Graphics g = Graphics FromImage(firstImage);

                //消除锯齿

                g SmoothingMode = System Drawing Drawing D SmoothingMode AntiAlias;

                //填充背景颜色

                // Brush br = new SolidBrush(Color Red);

  

                if (firstImage Width == secondImage Width

                    && firstImage Height == secondImage Height)

                {

                    for (int i = ; i < firstImage Width; i++)

                    {

                        for (int j = ; j < firstImage Height; j++)

                        {

               if (!firstImage GetPixel(i j) Equals(secondImage GetPixel(i j)))

                           {         //设置不同的地方为红色

                                firstImage SetPixel(i j Color Red);

                            }

                        }

                    }

               }

             }

  

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

   副图片的大小要一样

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

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

  

lishixinzhi/Article/program/net/201311/12045

相似回答