#
摘要: 如何使用BHO定制你的Internet Explorer瀏覽器 ,當時覺得這個是一個很好的資料。。
閱讀全文
摘要: doxygen 使用簡介(C,C++為代碼作注釋)
閱讀全文
最近看朋友玩QQ找茬( QQ找茬主要是比較2張圖片的不同之處,然后雙擊即可 ) 我也去玩了把,結果高手如云,淪為近視眼(等級)打算寫個程序讓程序自動去識別,自動去點擊鼠標。
實現方法很簡單,先得到2張需要比較的圖片(可以通過QQ找茬窗口句柄,得到當前HITMAP,然后得到其像素點),建立一個一張表的數組,然后比較其對應像素點的值是否相同,不同為1,相同為0.
這樣就可以在內存中得到不同的區域,但這個區域是離心的,也就是不完全對,必須對其進行處理,可以通過對這些數組值為1的點進行腐蝕(關于腐蝕算法主要讓一些區域膨脹一圈)
其中腐蝕算法:
對Z中的集合A和B,B對A進行腐蝕的整個過程如下: 是以得到B的相對與它自身原點的映像并且由z對映像進行移位為基礎的。A被B膨脹是所有位移z的集合,這樣, 和A至少有一個元素是重疊的。我們可以把上式改寫為: 結構元素B可以看作一個卷積模板,區別在于膨脹是以集合運算為基礎的,卷積是以算術運算為基礎的,但兩者的處理過程是相似的。
⑴ 用結構元素B,掃描圖像A的每一個像素
⑵ 用結構元素與其覆蓋的二值圖像做“與”操作
⑶ 如果都為0,結果圖像的該像素為0。否則為1
通過腐蝕過后可以基本上得到我們需要找的區域,然后利用BFS得到其Rect,說明如果用DFS的話可能會出現棧溢出,因為有些區域太大。
得到Rect后可以SetCursorPos設置鼠標位置(注意 : Rect是相對于窗口句柄, SetCursorPos是設置的位置是相對桌面的坐標),最后可以
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
相應事件。
后記:就是在做這個的時候有時候會出現本來是一個區域,程序會統計出2個區域,其實就是在腐蝕算法的時候未處理好,還有一個就是可以通過網絡抓包獲取原始圖片。
因為在預處理的時候,復雜度還是較高,所以在找完一張完整的圖片需要5秒左右的時間。
最近學校的事情挺多,同時也換了新的住處。
上周畢業答辯順利結束,宣告我的大學生活即將結束。四年,彈指一揮,四年,磨一劍,記得剛進大學的時候有過不少憧憬,對一切都充滿著幻想,可是四年后的今天,很多憧憬都被現實粉碎,把我的性格磨平了,把我磨得稍微平靜了,但是變得更加的倔強,變得比較宅男,有些東西拿得起,放卻不下。
6月是一個離別的季節,在這離別之際,不得不給自己的同窗好友說再見,祝福每一個人都有美好的明天,這里充滿著我們大學的回憶,有歡笑,有淚水,有無助等等,所有的這一切我都會喜歡,同時也因為女友,我也喜歡懷舊,喜歡把以前的東西翻出來看看,品味得與失。離別是為了下一次重逢,我們會再次相遇。
我不后悔我大學生活,這里我認識了不少朋友和老師,學到的不僅是知識,而更多的是做人,更是思想上進步,這才是想要的。我不浪漫,也不浪漫,我更喜歡獨自一個人在哪兒凝思,一個人在哪兒玩游戲,品味這一切自己可能才可能感覺的快樂。
我說話一般不經過大腦,平時可能有些語言過于刺激,但是跟多的是成為笑話,夜深人靜的時候我喜歡在哪兒聽最近一直聽的哪首歌,對著電腦發呆不知道做什么。想著那里來,就那里去吧,去我該去的地方,去我該尋覓的角落,去我小小的世界,去我追尋的港灣,去我……
我口才不怎么好,交流上也不是很主動,但是信念一直支撐著我,堅持,努力,為了那當初的承諾和夢想。
在工作上我真的學到不少,最近也沒在堅持每天都在哪兒敲鍵盤,忙畢業答辯的事情,可惜我制作的PPT,對于我長篇大論的說算法,老師卻沒多大興趣。在公司學會了代碼重用性,可擴展性的重要行。在后期維護以及代碼重用都是很重要,一個好的設計模式可能直接影響整個系統的性能或者穩定性。最近也比較閑,沒事看到內存池,腳本系統的設計。自己的興趣一直在網絡,雖然學得較淺,但是還是堅持學習,感謝公司的fox,kevinlynx,pozen,還有女友一切幫助。中午休息時玩war對戰,一直被fox虐,一是打得撇,二是很久不打,對其沒多大興趣。
努力吧,為了自己,也為了關心自己的所有人。
很久沒來更新blog了,一是忙畢業設計,二是最近看的都是哪些所謂的C++巨著,他們都提供了很多不錯的建議;他們能提高你的c++編程能力,也能提高你設計出穩定的c++程序的能力,但是它們的內容主要集中在c++的通用知識,雖然也有一些講述游戲編程的書籍,但是都不是很深入。
游戲軟件開發與一般的程序開發在要求更應該嚴格。對于游戲應該首先保證穩定,然后效率,性能都很重要。
最近看的主要是模塊代碼,對于代碼分格問題有一定提高。
通過培訓對于一個模塊開發流程有一定的了解,切記多溝通!
A.特化類的友元模板函數的操作符重載
最近寫一測試代碼關于特化類的友元模板函數的操作符重載遇到一問題。
先貼一個錯誤代碼:
1
#pragma region 類DTest信息
2
3
// 聲明一個類
4
template<class Type , int dim>
5
class DTest
6

{
7
public:
8
// 構造函數
9
DTest()
10
{
11
memset(_cords,0,sizeof(_cords));
12
}
13
DTest(Type cord[dim])
14
{
15
memcpy(_cords,cord,sizeof(cord));
16
}
17
18
// 友元模板
19
friend ostream & operator << (ostream & out , const DTest<Type,dim> & data);
20
21
private:
22
Type _cords[dim];
23
};
24
// 友元模板的實現
25
template<class Type, int dim>
26
ostream & operator << (ostream & out , const DTest<Type,dim> & data)
27

{
28
for(int i = 0 ; i < dim-1 ; i++)
29
out << data._cords[i] <<" ";
30
31
out <<endl;
32
return out;
33
}
34
35
#pragma endregion
用devc++,Vs2005,vc2008都不能編譯通過,報連接錯誤,或者報模板函數是一個普通非模板類,或者非模板函數。
于是翻開C++ Primer,在16.4節有詳細的說明,
1.對于一個特化的類,聲明一個友元模板必須對友元模板授予類的一個實例。
2.對特定實例化的友元關系時,必須在可以用于友元聲明之前聲明類或函數。
所以下面是修改后的代碼
1
template<class Type , int dim>
2
class DTest;
3
template<class Type , int dim>
4
ostream & operator << (ostream &out ,const DTest<Type,dim> &sess);
5
6
7
#pragma region 類DTest信息
8
template<class Type , int dim>
9
class DTest
10

{
11
public:
12
// 構造函數
13
DTest()
14
{
15
memset(_cords,0,sizeof(_cords));
16
}
17
DTest(Type cord[dim])
18
{
19
memcpy(_cords,cord,sizeof(cord));
20
}
21
22
// 特化時,<Type,dim> 省略為<>
23
friend ostream & operator << <>(ostream & out , const DTest<Type,dim> & data);
24
25
private:
26
Type _cords[dim];
27
};
28
29
// 友元模板的實現
30
template<class Type, int dim>
31
ostream & operator << (ostream & out , const DTest<Type,dim> & data)
32

{
33
for(int i = 0 ; i < dim-1 ; i++)
34
out << data._cords[i] <<" ";
35
36
out <<endl;
37
return out;
38
}
39
#pragma endregion
B. 常見的幾種內存泄漏
1.分配空間未釋放
2.嵌套對象指針未釋放,
比如,一個類中包含另一個類的指針,在初始化的時候分配空間,缺沒有在析構函數釋放他。
3.釋放一個對象數組的時候沒有使用[] ,
delete m_pObj; 只是釋放第一個&m_pObj[0] 對象,應該使用delete [] m_pObj;
4.出現淺拷貝現象
5.返回一個動態分配的對象,其實可以看【effective c++】 的條款23: 必須返回一個對象時不要試圖返回一個引用
先總結這些,以后慢慢記錄我的學習筆記。