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