Windows GDI中有兩個(gè)用來得到位圖圖像數(shù)據(jù)的API,分別是
GetBitmapBits和GetDIBits;按照MSDN的解釋,前者是用來得到設(shè)備獨(dú)立位圖的BITS,后者是得到兼容位圖的BITS,所以在調(diào)用該函數(shù)的時(shí)候,第一個(gè)主要的區(qū)別是:GetDIBits需要提供一個(gè)設(shè)備內(nèi)容,同時(shí)需要將位圖的HANDLE選進(jìn)這個(gè)設(shè)備內(nèi)容(DC)才能能夠得到位圖的信息。
我想上面的區(qū)別大家可能都知道,其實(shí)它還隱藏著另一個(gè)區(qū)別:
就是對(duì)于同一個(gè)位圖,得到的BITS內(nèi)容的BUFFER不一樣!
大家都知道BMP文件存儲(chǔ)數(shù)據(jù)是倒敘的,也就是從圖像的右下角開始存儲(chǔ),文件的最后是圖像的左上角(這個(gè)來歷可以看:WINDOWS編程中介紹);使用GetBitmapBits取得的BUFFER,位圖的右下角的內(nèi)容為第一個(gè)字節(jié),實(shí)際上和真正的圖像字節(jié)應(yīng)該是一樣的,而GetDIBits剛好相反,其BUFFER的順序符合BMP文件中的順序,如果按照正常的坐標(biāo),其存儲(chǔ)順序應(yīng)該是倒敘。
所以在程序中要合理的使用這兩個(gè)API來得到你想要的位圖數(shù)據(jù)。