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

{
7
public:
8
// 構(gòu)造函數(shù)
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
// 友元模板的實現(xiàn)
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都不能編譯通過,報連接錯誤,或者報模板函數(shù)是一個普通非模板類,或者非模板函數(shù)。
于是翻開C++ Primer,在16.4節(jié)有詳細(xì)的說明,
1.對于一個特化的類,聲明一個友元模板必須對友元模板授予類的一個實例。
2.對特定實例化的友元關(guān)系時,必須在可以用于友元聲明之前聲明類或函數(shù)。
所以下面是修改后的代碼
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
// 構(gòu)造函數(shù)
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
// 友元模板的實現(xiàn)
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. 常見的幾種內(nèi)存泄漏
1.分配空間未釋放
2.嵌套對象指針未釋放,
比如,一個類中包含另一個類的指針,在初始化的時候分配空間,缺沒有在析構(gòu)函數(shù)釋放他。
3.釋放一個對象數(shù)組的時候沒有使用[] ,
delete m_pObj; 只是釋放第一個&m_pObj[0] 對象,應(yīng)該使用delete [] m_pObj;
4.出現(xiàn)淺拷貝現(xiàn)象
5.返回一個動態(tài)分配的對象,其實可以看【effective c++】 的條款23: 必須返回一個對象時不要試圖返回一個引用
先總結(jié)這些,以后慢慢記錄我的學(xué)習(xí)筆記。