青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 7  文章 - 57  trackbacks - 0
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

續上文:
QQ美女找茬(外掛)學習筆記(一)截圖的實現與保存
http://www.shnenglu.com/ArthasLee/archive/2010/11/18/134022.html

比較兩幅圖片的不同過程中,筆者直接用了 == 來比較,盡管XOR會效率高點。
以下是筆者的代碼,非完全原創,有參考,至于具體URL,在上一篇已經跟大家公布過:

 1
void CZhaoChaV30Dlg::CompareBMP( DWORD*& pBuffer, DWORD* pLeft, DWORD* pRight )
 2{
 3    if!pBuffer )   
 4    {   
 5        delete []pBuffer;   
 6        pBuffer = NULL;   
 7    }
   
 8
 9    pBuffer = new DWORD[ nWidth * nHeight ];   
10    //比較兩幅圖,數據相同的設置為白色,不同的為紅色。  
11    for (DWORD i = 0; i < (DWORD)nWidth * nHeight; i++ )   
12    {   
13        if( pLeft[ i ] != pRight[ i ] )    
14            pBuffer[ i ] = RGB( 0,0,255 );    
15        else  
16            pBuffer[ i ] = pLeftBuffer[ i ] ;    
17    }

18
19    //轉換圖片數據,使圖片按正常順序顯示。(BMP格式與窗口圖像存放豎坐標相反)  
20    //筆者開始一直不是很明白該位blog主的意思,為什么要倒轉y坐標;
21    //因此就把下面的注釋掉,從windows圖片瀏覽器觀察位圖,發現位圖顯示出來的時候并沒有倒轉;
22    //直至在后來要把位圖顯示到窗口上才真切理解“BMP格式與窗口圖像存放豎坐標相反”這個事實;
23    //要注意,不然日后要寫全自動WG,直接由機器發送鼠標消息模擬點擊的時候就杯具了。
24    int width = nWidth;   
25    for ( DWORD i = 0; i < (DWORD)(nHeight / 2); i++ )   
26    {   
27        for ( DWORD j = 0; j < (DWORD)width; j++ )   
28        {   
29            DWORD temp;   
30            temp = *( pBuffer + i * width + j );   
31            *( pBuffer + i * width + j ) = *( pBuffer + width * ( nHeight - 1 - i ) + j );   
32            *( pBuffer + width * ( nHeight - 1 - i ) + j ) = temp;   
33        }
   
34    }
  
35
36}

37
傳入三個pBuffer,然后對后面兩個參數的內容進行比較,然后把比較結果寫入第一個pBuffer指向的內存空間中。這段代碼筆者還是好好學習了下,大家留意注釋。

比較完成以后,當然是要把比較的成果顯示到程序主窗口的客戶區中。不然之前一切的努力也就白費了。
 1void CZhaoChaV30Dlg::BMPToWnd( void )   
 2{    
 3    CBitmap bm; 
 4    CDC* pDC;
 5
 6    bm.CreateBitmap( nWidth, nHeight, 132, pBuffer );   
 7    CBrush brush;   
 8    brush.CreatePatternBrush( &bm );   
 9
10    pDC = GetDC();
11    CBrush* pOldBrush = (CBrush*)pDC -> SelectObject( &brush );   
12
13    pDC->FillRect( &CRect( 00, nWidth, nHeight ), &brush );   
14
15    pDC->SelectObject( pOldBrush );   
16
17    brush.DeleteObject();   
18    bm.DeleteObject();   
19    ReleaseDC(pDC);   
20}
   
在上面的代碼中,有個函數是CreateBitmap,與之前截圖用到的CreateCompatableBitmap有點相似,筆者有點好奇,拜了google大神后,找到了以下的文章:
http://hi.baidu.com/550189285/blog/item/3742cfd4f8c9f30ba08bb775.html
PS:盡管隨便貼URL是不道德滴,但是學習資料不保留下來更加不道德~


一般來說,WG來到這里,就差不多了。因為我們的基本目標已經達到。
but。。。
其余的細節呢?
要不要令這個WG更自動化,讓“它”自己“玩”游戲呢?
又該如何實現呢???


以下是筆者在編碼過程中遇到的問題和解決心得:
再次聲明,此乃筆記,不具有普適性,有錯誤和改進,歡迎指出~

問題3:比較圖片和一個奇怪的現象?

 

背景:

捕獲了圖片之后開始對兩幅相同的圖像進行比較,可以選取每個像素點進行比較,方法有二:直接用 == 比較,或者將兩個點進行Xor運算。但是由此比較出來的圖片,卻出現了“重影現象”;

如下圖所示:

 

子問題:什么原因導致此現象?

 

解決方案:

分析:筆者對比了幾個失敗樣本之后,發現重影多數是出現在X方向上Y方向上則沒有明顯現象。如果這種現象是由色差這樣微小的非肉眼能識別的區別而造成的,那么應該整張圖也出現重影,而不應該在某一個方向上出現特別顯著的重影。

 

結論:

兩幅圖在X坐標上有1個像素的偏移,筆者沒有自己通過任何技術手段去獲取兩幅圖片左上角的確切坐標,只是google了一下,就找到了相關的文章:

http://student.csdn.net/space.php?uid=110891&do=blog&id=38571

這個鏈接在筆者的上一篇文章已經提到過。

 

關鍵的數字們~

x1 = 8;

y1 = 193;

x2 = 516 + 1; //左右兩副圖本身有偏移個像素,去掉偏移的,只比較共有的部分

y2 = 193;

nWidth = 498 - 1;//左右兩副圖本身有偏移個像素,去掉偏移的,只比較共有的部分

nHeight = 448;

 

感想:

遇到問題的時候,google很重要。

 

 

 

問題4:將比較結果顯示到更新了的窗口上:

 

背景:

位圖信息被保存在pBuffer上,為了整個程序可以僅僅透過pBuffer來溝通,放棄了之前的hdcWindowhBitMap等變量的使用(讓它們在截圖函數返回前就被銷毀)。因此,MSDN上的那段關于截圖的代碼的后半部分就不能再用。

 

子問題:

在位圖內容已經存在的情況下,通過pBuffer,如何把位圖顯示到窗口上?

 

解決方案:

創建一個滑刷,CBrush brush;然后把pBuffer里面的像素填充進去。但是注意填充之前要保證pBuffer里面的縱坐標被倒轉一下再顯示到窗口中,不然會出現倒轉,詳見筆者在上面的代碼,有中文注釋。

 

 

 

問題5:隱藏窗口時的延遲性造成截圖干擾

 

背景:

按下display按鈕進行找茬之后,需要隱藏窗口再進行截圖,不知道是機器原因還是別的問題,窗口還沒有隱藏好,可能截圖操作就已經完成了,這是截下的圖就會是包含了“窗口殘像”的圖,再進行比較當然毫無意義。

 

例如出現了這樣的“靈異事件”:


 

分析:

顯然是窗口還沒有完全隱藏,截圖就進行了,so……

詳情見代碼:

 1void CZhaoChaV30Dlg::OnBnClickedButtonDisplay()
 2{
 3    // TODO: 在此添加控件通知處理程序代碼
 4    ShowWindow( SW_HIDE );
 5    Sleep( 500 );// Good code!
 6
 7    pBuffer = NULL;
 8#ifdef DEBUG_CODE
 9    CaptureImage( pLeftBuffer, x1, y1, nWidth, nHeight );
10    SaveBMP( pLeftBuffer, _T("Debug_1.bmp") );
11    CaptureImage( pRightBuffer, x2, y2, nWidth, nHeight );
12    SaveBMP( pRightBuffer, _T("Debug_2.bmp") );
13    CompareBMP( pBuffer, pLeftBuffer, pRightBuffer );
14    SaveBMP( pBuffer, _T("Result.bmp") );
15#else
16    CaptureImage( pLeftBuffer, x1, y1, nWidth, nHeight );
17    CaptureImage( pRightBuffer, x2, y2, nWidth, nHeight );
18    CompareBMP( pBuffer, pLeftBuffer, pRightBuffer );
19#endif
20    ShowWindow( SW_SHOW );
21
22    //RetSetWnd();
23    BMPToWnd();    
24}

 

解決方案:

隱藏窗口代碼后加一行:Sleep 500 ;

讓程序“休息”一下,這樣就可以等窗口完全隱藏過后才開始截圖。

 

感想:

Sleep真神奇~
理想狀態下一切都很理想,但實際操作的時候,還是會出現某些非理論性延遲。這時需要
coder們靈活變通,處理一下這個延遲了的“消息”~

 

鳴謝:
jingzhongrong——提供了不少測試樣例和分析案例,從反面促使筆者盡快完成此文;
vczh——從正面鼓勵筆者盡快完成此文;
vczh:http://www.shnenglu.com/vczh/

posted on 2010-11-24 00:02 ArthasLee 閱讀(3589) 評論(14)  編輯 收藏 引用 所屬分類: windows應用層編程

FeedBack:
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 00:53 長沙
學習了。。。很牛逼  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 09:07 潘孫友
寫得不錯,加油!

期待后續文章 :)  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 09:37 睡覺沒床
兄弟,這也叫外掛?  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 10:25 放屁阿狗
我在5173的時候有個同事是用vb做游戲圖像識別的,當時覺得很土,但還是比較有效  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 10:26 陳梓瀚(vczh)
@睡覺沒床
因為有了差你就可以控制鼠標去點了吧,我覺得基本上可以構成一個外掛了——雖然目標游戲比較簡單。  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 11:27 尤里卡
呵呵,我理解的話,一般將代碼注入其他程序進程的東西才稱為外掛(比較形象吧?)。這種的話,我一般稱之為輔助工具、或作弊程序。
樓主加油。  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 16:49 陳梓瀚(vczh)
@尤里卡
這是病毒- -b  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示[未登錄] 2010-11-24 17:12 niino
@陳梓瀚(vczh)
那是病毒...  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 19:13 ArthasLee
@潘孫友
多謝支持,也打算寫后續文章。不過都是那句:這兩篇文章都是我的筆記性質居多,因此不具有普適性。  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 19:14 ArthasLee
@放屁阿狗
本人才疏學淺,這個哪里是什么圖像識別,只不過是單純比較像素點罷了,呵呵!  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 19:18 ArthasLee
@陳梓瀚(vczh)
vczh兄正解~目標游戲那是相當簡單,要我以現在的水平弄個星際蟑螂流戰術算法評估器,估計成功率跟我在有生之年看到人類實現超光速飛行的概率差不多。
例如這些:http://sc2.plu.cn/tactical/2010-11-04/22450.html
不過可能也不能叫做外掛吧?  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-24 19:22 ArthasLee
@尤里卡
將代碼注入其他進程啊?呵呵,聽聞過。不過現在還不會呢。有機會的話希望兄臺指點指點~
多謝支持先。  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-26 14:22 feixuwu
樓主這種辦法比較耗CPU吧?另外,刷新也會是個問題,不過探索精神應該贊一個。原來也為朋友做過這個外掛,當時用的一個辦法是掛鉤directDraw,直接操作緩沖區,效率會比較高,另外顯示上也會更好。  回復  更多評論
  
# re: QQ美女找茬(外掛)學習筆記(二)圖片的比較與顯示 2010-11-26 15:18 ArthasLee
@feixuwu
哇!長見識了!今晚去了解了解。謝謝兄臺給的建議!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲精品乱码久久久久| 久久蜜桃av一区精品变态类天堂| 久久久www成人免费毛片麻豆| 国产午夜精品全部视频播放| 欧美在线www| 欧美一区二区播放| 狠狠久久五月精品中文字幕| 国产精品美女诱惑| 国产曰批免费观看久久久| 欧美中文字幕不卡| 欧美在线视频播放| 精品91视频| 亚洲欧洲日韩女同| 你懂的视频一区二区| 亚洲砖区区免费| 欧美成人视屏| 欧美亚洲综合在线| 一区二区视频免费完整版观看| 久久精品卡一| 国产精品日日摸夜夜摸av| 91久久精品国产91性色tv| 91久久中文| 国产精品久久国产精麻豆99网站| 欧美在线影院| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品视区| 蘑菇福利视频一区播放| 欧美日韩国产免费观看| 久久精品国产清自在天天线| 欧美国产激情二区三区| 欧美有码在线观看视频| 欧美a一区二区| 久久久久久久综合| 欧美日韩国产一区二区三区地区 | 麻豆av福利av久久av| 欧美噜噜久久久xxx| 久久久亚洲国产美女国产盗摄| 欧美国产高清| 免费不卡欧美自拍视频| 国产精品高清一区二区三区| 亚洲国产va精品久久久不卡综合| 国产伦精品一区二区| 亚洲欧洲日本在线| 亚洲国产另类久久久精品极度 | 久久综合免费视频影院| 欧美无乱码久久久免费午夜一区| 欧美刺激午夜性久久久久久久| 国产乱码精品一区二区三区不卡| 亚洲精品久久7777| 最近中文字幕mv在线一区二区三区四区| 亚洲一区二区三区中文字幕| 夜夜爽99久久国产综合精品女不卡 | 另类天堂av| 国产欧美日韩视频在线观看| 99视频超级精品| 日韩视频在线免费| 欧美高清在线视频| 欧美成人精品激情在线观看| 在线播放日韩欧美| 久久精品电影| 久久人人97超碰人人澡爱香蕉| 亚洲精品视频中文字幕| 欧美暴力喷水在线| 欧美电影在线免费观看网站| 狠狠入ady亚洲精品| 久久国产精品99精品国产| 久久精品国产久精国产爱| 国产精品国产三级国产普通话99| 日韩网站在线| 亚洲天堂黄色| 国产精品va在线播放| 亚洲小说欧美另类社区| 午夜精品视频一区| 国产欧美日韩综合一区在线观看 | 99热在这里有精品免费| 中文在线一区| 国产精品久99| 亚洲欧美在线网| 久久躁日日躁aaaaxxxx| 亚洲国产婷婷香蕉久久久久久| 美女91精品| 亚洲精品一二区| 午夜久久tv| 韩国精品一区二区三区| 欧美高清在线| 亚洲一区二区三区午夜| 久久免费视频在线观看| 最新成人av网站| 欧美午夜一区二区福利视频| 午夜精品国产更新| 欧美高清视频www夜色资源网| aa级大片欧美三级| 国产精品一区二区三区成人| 欧美中文日韩| 最新国产の精品合集bt伙计| 亚洲一区免费网站| 国产一区二区三区四区老人| 免费观看久久久4p| 亚洲小说春色综合另类电影| 久久噜噜亚洲综合| av不卡在线看| 韩日视频一区| 欧美日韩综合精品| 欧美伊人久久大香线蕉综合69| 亚洲电影免费观看高清完整版在线| 亚洲一区二区三区国产| 黄色国产精品| 国产精品成人观看视频免费| 久久看片网站| 亚洲香蕉成视频在线观看 | 欧美中文在线视频| 一区二区电影免费观看| 国内一区二区在线视频观看| 欧美日韩免费在线观看| 久久精品卡一| 亚洲中字黄色| 日韩亚洲欧美在线观看| 免费成人美女女| 久久精品国产第一区二区三区| 日韩午夜免费视频| 极品尤物久久久av免费看| 国产精品成人在线观看| 欧美华人在线视频| 久久久久久久一区二区三区| 亚洲欧美国产视频| 日韩午夜av电影| 亚洲成人在线视频网站| 久久人人爽人人| 久久久99精品免费观看不卡| 国内精品久久久久影院色| 亚洲男人av电影| 一本一道久久综合狠狠老精东影业| 欧美aⅴ99久久黑人专区| 久久精品一区二区三区不卡| 亚洲欧美日韩网| 亚洲图片欧美午夜| 亚洲视屏在线播放| 一本大道久久a久久精品综合 | 欧美精品成人91久久久久久久| 久久另类ts人妖一区二区| 欧美一区二区高清| 亚洲欧美在线x视频| 亚洲女爱视频在线| 亚洲图色在线| 亚洲一区久久| 亚洲综合首页| 欧美一站二站| 久久蜜桃资源一区二区老牛| 久久精品一级爱片| 久久人人97超碰国产公开结果| 久久国产乱子精品免费女 | 亚洲精品视频在线看| 亚洲人成在线播放网站岛国| 亚洲日韩中文字幕在线播放| 亚洲精品久久久蜜桃| 99热在这里有精品免费| 亚洲一区高清| 午夜欧美大尺度福利影院在线看| 午夜亚洲福利在线老司机| 欧美一区二区三区免费在线看| 久久国产精品一区二区三区| 久久免费精品视频| 欧美激情亚洲精品| 欧美午夜女人视频在线| 国产目拍亚洲精品99久久精品| 国产午夜久久| 亚洲日本欧美日韩高观看| 99国产精品99久久久久久粉嫩| 亚洲一区二区视频在线| 欧美在线亚洲在线| 精品福利电影| 欧美精品在线免费| 亚洲视频免费看| 欧美综合国产| 欧美不卡视频| 国产精品久久久久久户外露出| 国产欧美亚洲一区| 亚洲欧洲一区二区三区在线观看| 9色精品在线| 久久综合精品国产一区二区三区| 欧美激情一区二区三区在线视频观看| 最新亚洲激情| 欧美一级黄色录像| 欧美激情综合五月色丁香| 国产精品日韩一区二区| 亚洲人屁股眼子交8| 欧美一级成年大片在线观看| 欧美黄色一区| 亚洲男人的天堂在线| 欧美成人午夜| 国产在线国偷精品产拍免费yy| 一区二区福利| 欧美韩日一区| 久久成人18免费网站| 欧美日韩视频在线| 亚洲激情精品| 久久久亚洲影院你懂的| 一区二区三区国产精华| 欧美 日韩 国产精品免费观看| 国产视频一区二区在线观看|