bmp文件例子

       不同的部分:象素值

根據biBitCount參數有以下3種情況

<!--[if !supportLists]-->(1)   <!--[endif]-->有調色板(biBitCount參數值爲148

此時位圖文件先跟一段調色板顏色數據,再跟象素的顏色索引信息數據;

<!--[if !supportLists]-->(2)   <!--[endif]-->無調色板(biBitCount參數值爲24

此時直接跟一段象素數據,每個象素由3個字節表示顏色值,順序BGR

<!--[if !supportLists]-->(3)   <!--[endif]-->無調色板(biBitCount參數值爲32

此時直接跟一段象素數據,每個象素由4個字節表示顏色值,順序BGR

 

 

11位象素單色4×4位圖,假設第13象素爲黑色,其他都爲白色,那麼有下面的數據來表示該位圖的象素顏色值

00 00 00 00 FF FF FF 00; 50 00 00 00 F0 00 00 00 F0 00 00 00 F0 00 00 00.

說明:前面8個字節,是調色板的值,單色只有黑色和白色兩種,它們的RGB表示就是前面的8個字節。RGB000)爲黑色,RGB255255255)爲白色,

50 00 00 00表示第一行位圖象素,這裏只有前4位有效,其他位都是補位而已。5的二進制就是0101,它對應第一行的四個象素的顏色索引“黑白黑白”;

F0 00 00 00表示第二行的位圖象素,這裏也是前4位有效,F的二進制是1111,正好對應顏色索引“白白白白”;

其他行的象素顏色一樣表示法。

 

注:這裏單色,所以參數biBitCount1,即1位表示一個象素,所以4×4的每行就只有4位來表示象素顏色就夠了,但是,系統規定必須32位對齊,所以需要280來來補足。故這裏的每行都用4個字節來表示,只是後面28位沒有實際用處而已。

 

注意:每個調色板中的一種顏色,必須用4個字節表示(RGB絕對值)

注意:關於象素每行補位算法,到底要補多少位,這可以不用操心,用算法

int i = ((Bitmap.bmWidth *wBitCount+31)/32)*4*Bitmap.bmHeight  得到的i就是: 描述位圖象素顏色總的要用到的字節數。該字節數減去該行象素的字節數,就是補位的字節數。

 

調色板的顏色個數爲2biBitCount次冪,

 

24位象素8色的4×4位圖,假設第一行第一象素爲綠色,第三象素爲紅色,第二象素爲藍色,底爲黑色,則有下面的數據來表示該位圖文件的顏色值

RGBQUAD  pallete[16] = { (0x0, 0x0, 0x0, 0x0), (0xFF, 0xFF, 0xFF, 0x0), (0xFF,0x0,0x0,0x0), (0x0,0xFF,0x0,0x0),( 0x0,0x0,0xFF,0x0),( 0xFF,0xFF,0x0,0x0),( 0xFF,0x0,0xFF,0x0),

(0x0,0xFF,0xFF,0x0),( 0xFF,0x80,0x0,0x0),( 0xFF,0x0,0x80,0x0),( 0xFF,0x80,0x80,0x0),

(0xFF,0xFF,0x80,0x0),( 0x80,0x80,0x80,0x0),( 0x80,0x0,0x0,0x0),( 0x,0x80,0x0,0x0),

(0x0,0x0,0x80,0x0)};

這是調色板顏色值,後面要跟各個象素的顏色索引值,它們共同組成象素顏色值的表述

32 40 00 00  00 00 00 00  00 00 00 00  00 00 00 00

第一行“32 40 00 00”分別表示“綠藍紅黑”後16位爲補位;

其他行一樣的理解。

 

324位象素彩色的4×4位圖,假設第一行第一象素爲綠色,第三象素爲紅色,第二象素爲藍色,底爲白色,則有下面的數據來表示該位圖文件的顏色值

00 FF 00  FF 00 00  00 00 FF  FF FF FF  00(標誌換行)

FF FF FF  FF FF FF  FF FF FF  FF FF FF  00

FF FF FF  FF FF FF  FF FF FF  FF FF FF  00

FF FF FF  FF FF FF  FF FF FF  FF FF FF  00

 

注意24位象素的位圖文件沒有調色板,但是,它的每個象素也不是用4字節表示,而是用3字節表示,即沒有那個顏色結構的保留字節。但是,這樣就會出現每行字節不能16位對齊的問題,所以每行完了必須要有個行結束字節“00”,

 

432位象素真彩色的4×4位圖,假設第一行第一象素爲綠色,第三象素爲紅色,第二象素爲藍色,底爲白色,則有下面的數據來表示該位圖文件的顏色值

00 FF 00 00  FF 00 00 00  00 00 FF 00  FF FF FF 00

FF FF FF 00  FF FF FF 00  FF FF FF 00  FF FF FF 00

FF FF FF 00  FF FF FF 00  FF FF FF 00  FF FF FF 00

FF FF FF 00  FF FF FF 00  FF FF FF 00  FF FF FF 00

 

32位象素的位圖,也沒有調色板,但是它的顏色值是用4字節來表示的,除了RGB值外,還有一個保留值,始終爲0

 

 

這裏的例子沒有列舉8位象素64色的位圖,它的文件組織格式參看4位象素16色的例子。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章