熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

淺談.Net如何實現找出兩幅圖片的不同之處

2013-11-13 09:56:24  來源: .NET編程 

  初學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 = GraphicsFromImage(firstImage);

               //消除鋸齒

               gSmoothingMode = SystemDrawingDrawingDSmoothingModeAntiAlias;

               //填充背景顏色

               // Brush br = new SolidBrush(ColorRed);

  

               if (firstImageWidth == secondImageWidth

                   && firstImageHeight == secondImageHeight)

               {

                   for (int i = ; i < firstImageWidth; i++)

                   {

                       for (int j = ; j < firstImageHeight; j++)

                       {

              if (!firstImageGetPixel(i j)Equals(secondImageGetPixel(i j)))

                          {         //設置不同的地方為紅色

                               firstImageSetPixel(i j ColorRed);

                           }

                       }

                   }

              }

            }

  

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

  副圖片的大小要一樣

  副圖片截圖的位置不要歪了一定要精確第一種方法歪了一些勉強可以識別但是對第二種方法那簡直就是杯具了

  上面個方法是用來找出圖片的不同之處如果用於比較兩幅圖片是否相同效率都比較低不建議使用

  

  目前我暫時只想到用這種方法來找出二副圖片的不同之處第一種方法對制作大家來找茬的外掛效率比較高(前提是眼力不要太差)第二種方法運算速度有點慢主要因為要遍歷圖片的像素這個過程需要多的時間 估計改進下算法就會好很多當然光會對比圖片對於制作大家來找茬的外掛是遠遠不夠的有機會的話我就說說整個大家來找茬外掛的制作方法!


From:http://tw.wingwit.com/Article/program/net/201311/12045.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.