久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

位圖格式資料

 almathm 2011-05-22
位圖格式資料

位圖文件分為4個(gè)部分:
第一部分:
文件頭bitmap-file header
第二部分:
信息頭bitmap-infomation header
第三部分:
顏色標(biāo) color table
第四部分:
位圖數(shù)據(jù) bitmap data

第一部分結(jié)構(gòu):
0x0000H - 0x0001H   2 BYTES 文件標(biāo)識(shí)              基本上就是'BM'
0x0002H - 0x0005H   4 BYTES 表示整個(gè)文件的大小    字節(jié)順序是否固定 little_Endian or big_Endian?
0x0006H - 0x0009H   4 BYTES 保留                  必須設(shè)置為0
0x000AH - 0x000DH   4 BYTES 位圖數(shù)據(jù)的偏移量      從文件開(kāi)始計(jì)算

第二部分結(jié)構(gòu):
0x000EH - 0x0011H   4 BYTES 位圖信息頭的長(zhǎng)度大小 整個(gè)第二部分結(jié)構(gòu)的大小,可能會(huì)增加字段,,所以需要讀取該值
0x0012H - 0x0015H   4 BYTES 位圖寬度              單位像素
0x0016H - 0x0019H   4 BYTES 位圖高度              單位像素
                                                 還有另一個(gè)用處,,就是指明該圖像是倒向的位圖,還是正向的位圖,。
                                                 如果該值是一個(gè)正數(shù),,圖像是倒向的,如果該值是一個(gè)負(fù)數(shù),,圖像是正向的,。
                                                 當(dāng)高度值是一個(gè)負(fù)數(shù)時(shí)(正向圖像)圖像將不能被壓縮,壓縮方式不能是BI_RLE8或BI_RLE4,。

0x001AH - 0x001BH   2 BYTES 位圖的位面數(shù)          總是1
0x001CH - 0x001DH   2 BYTES 每個(gè)像素的位數(shù)        值為1 4 8 16 24 32
0x001EH - 0x0021H   4 BYTES 壓縮方式              [0] 不壓縮                   BI_RGB
                                                 [1] RLE-8壓縮,,8位RLE壓縮    BI_RLE8       每個(gè)象素8比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成
                                                 [2] RLE-4壓縮,,4位RLE壓縮    BI_RLE4       每個(gè)象素4比特的RLE壓縮編碼,,壓縮格式由2字節(jié)組成
                                                 [3] Bitfields位域存放方式    BI_BITFILEDS 每個(gè)象素的比特由指定的掩碼決定
0x0022H - 0x0024H   4 BYTES 位圖數(shù)據(jù)大小          必須是4的整數(shù)倍,說(shuō)明圖象的大小,,以字節(jié)為單位,。當(dāng)用BI_RGB格式時(shí),可設(shè)置為0,。
0x0026H - 0x0029H   4 BYTES 水平分辨率            對(duì)于設(shè)備無(wú)關(guān)圖 ,,設(shè)置成為0
0x002AH - 0x002DH   4 BYTES 垂直分辨率            對(duì)于設(shè)備無(wú)關(guān)圖 ,設(shè)置成為0
0x002EH - 0x0031H   4 BYTES 使用的顏色數(shù)          說(shuō)明位圖實(shí)際使用的顏色表中的顏色索引數(shù),,
                                                 設(shè)為0的話,,則說(shuō)明使用所有調(diào)色板項(xiàng),如果有調(diào)色板,,則大小等于2^VALUE(0x001CH - 0x001DH)
                                                 16位及以上位圖不使用顏色表,。

0x0032H - 0x0035H   4 BYTES 重要的顏色數(shù)          指定重要的顏色數(shù),, 一般設(shè)置為0,表示所有的顏色一樣重要
                                                 如果設(shè)置的不等于0或者顏色數(shù),,就只有這么多值

 

第三部分結(jié)構(gòu):
起始地址為:(如果該部分存在的話)
sizeof(第一部分) + sizeof(第二部分)              讀取位圖文件的時(shí)候第一部分應(yīng)該不變,,需要根據(jù)第二部分的0x000EH-0x0011H的值
                                                 大小來(lái)確定第二部分的數(shù)據(jù)大小。
整個(gè)區(qū)域的大?。?br>N * 4 BYTES                                      4個(gè)字節(jié)依次表示BGRA, 編程中是RGBA 這里是little_Endian

具體大小依賴很多數(shù)值


第四部分結(jié)構(gòu):
起始地址為:VALUE(0x000AH - 0x000DH)

整個(gè)區(qū)域的大?。?br>具體每個(gè)像素的表示方法,依賴0x001CH - 0x001DH每個(gè)像素的位數(shù)
                             0x001EH - 0x0021H壓縮方式
                             0x002EH - 0x0031H顏色表大小

 


【0x001CH - 0x001DH】每個(gè)像素的位數(shù)
biBitCount=1 表示位圖最多有兩種顏色,,缺省情況下是黑色和白色,,你也可以自己定義這兩種顏色。
              圖像信息頭裝調(diào)色板中將有兩個(gè)調(diào)色板項(xiàng),,稱為索引0和索引1,。
              圖象數(shù)據(jù)陣列中的每一位表示一個(gè)象素。
              如果一個(gè)位是0,,顯示時(shí)就使用索引0的RGB值,,如果位是1,則使用索引1的RGB值,。

biBitCount=4 表示位圖最多有16種顏色,。每個(gè)象素用4位表示,并用這4位作為彩色表的表項(xiàng)來(lái)查找該象素的顏色,。
              例如,,如果位圖中的第一個(gè)字節(jié)為0x1F,它表示有兩個(gè)象素,,第一象素的顏色就在彩色表的第2表項(xiàng)中查找,
              而第二個(gè)象素的顏色就在彩色表的第16表項(xiàng)中查找,。此時(shí),,調(diào)色板中缺省情況下會(huì)有16個(gè)RGB項(xiàng)。對(duì)應(yīng)于索引0到索引15,。

biBitCount=8 表示位圖最多有256種顏色,。每個(gè)象素用8位表示,并用這8位作為彩色表的表項(xiàng)來(lái)查找該象素的顏色,。
              例如,,如果位圖中的第一個(gè)字節(jié)為0x1F,這個(gè)象素的顏色就在彩色表的第32表項(xiàng)中查找,。
              此時(shí),缺省情況下,,調(diào)色板中會(huì)有256個(gè)RGB項(xiàng),,對(duì)應(yīng)于索引0到索引255,。

biBitCount=16 表示位圖最多有2^16種顏色。每個(gè)色素用16位(2個(gè)字節(jié))表示,。這種格式叫作高彩色,,或叫增強(qiáng)型16位色,或64K色,。
               它的情況比較復(fù)雜,當(dāng) biCompression成員的值是BI_RGB時(shí),,它沒(méi)有調(diào)色板。
               16位中,,最低的5位表示藍(lán)色分量,,中間的5位表示綠色分量,高的5位表示紅色分量,,一共占用了15位,最高的一位保留,,設(shè)為0。
               這種格式也被稱作555 16位位圖,。
               如果biCompression成員的值是BI_BITFIELDS,那么情況就復(fù)雜了,,首先是原來(lái)調(diào)色板的位置被三個(gè)DWORD變量占據(jù),稱為紅,、綠,、藍(lán)掩碼。
               分別用于描述紅,、綠,、藍(lán)分量在16位中所占的位置。
               在Windows 95(或98)中,,系統(tǒng)可接受兩種格式的位域:555和565,,
               在555格式下,紅,、綠,、藍(lán)的掩碼分別是:0x7C00、0x03E0,、0x001F,,
               而在565格式下,它們則分別為:0xF800,、0x07E0,、0x001F。
               你在讀取一個(gè)像素之后,,可以分別用掩碼“與”上像素值,,從而提取出想要的顏色分量(當(dāng)然還要再經(jīng)過(guò)適當(dāng)?shù)淖笥乙撇僮鳎?br>               在NT系統(tǒng)中,則沒(méi)有格式限制,,只不過(guò)要求掩碼之間不能有重疊,。
            

biBitCount=24 表示位圖最多有2^24種顏色。這種位圖沒(méi)有調(diào)色板,,
               在位數(shù)組中,,每3個(gè)字節(jié)代表一個(gè)象素,分別對(duì)應(yīng)于顏色R,、G,、B。

biBitCount=32 表示位圖最多有2^32種顏色,。這種位圖的結(jié)構(gòu)與16位位圖結(jié)構(gòu)非常類似,,
               當(dāng)biCompression成員的值是BI_RGB時(shí),它也沒(méi)有調(diào)色板,,32位中有24位用于存放RGB值,,
               順序是:最高位—保留,紅8位,、綠8位,、藍(lán)8位。
               這種格式也被成為888 32位圖,。
               如果 biCompression成員的值是BI_BITFIELDS時(shí),,
               原來(lái)調(diào)色板的位置將被三個(gè)DWORD變量占據(jù),成為紅,、綠,、藍(lán)掩碼,
               分別用于描述紅,、綠,、藍(lán)分量在32位中所占的位置。
               在Windows 95(or 98)中,,系統(tǒng)只接受888格式,,
               也就是說(shuō)三個(gè)掩碼的值將只能是:0xFF0000、0xFF00,、0xFF,。
               而在NT系統(tǒng)中,,你只要注意使掩碼之間不產(chǎn)生重疊就行。
              (注:這種圖像格式比較規(guī)整,,因?yàn)樗荄WORD對(duì)齊的,
               所以在內(nèi)存中進(jìn)行圖像處理時(shí)可進(jìn)行匯編級(jí)的代碼優(yōu)化(簡(jiǎn)單)),。


第二部分的【0x002EH - 0x0031H   4 BYTES 使用的顏色數(shù)】

指定實(shí)際使用的顏色數(shù)目,。如果設(shè)置成0,位圖使用的顏色數(shù)目就等于 biBitCount成員中的數(shù)目,。
請(qǐng)注意,,如果不是可用顏色的最大值或不是0,則在編程時(shí)應(yīng)該注意調(diào)色板尺寸的計(jì)算,,
比如在4位位圖中,,調(diào)色板的缺省尺寸應(yīng)該是16*sizeof(RGBQUAD),如果不是,,
那么調(diào)色板的尺寸就應(yīng)該是 VALUE(0x002EH - 0x0031H)*sizeof(RGBQUAD),。

 

 

圖象數(shù)據(jù)壓縮

BI_RLE8:每個(gè)象素為8比特的RLE壓縮編碼,可使用編碼方式和絕對(duì)方式中的任何一種進(jìn)行壓縮,,這兩種方式可在同一幅圖中的任何地方使用,。

編碼方式:由2個(gè)字節(jié)組成,第一個(gè)字節(jié)指定使用相同顏色的象素?cái)?shù)目,,第二個(gè)字節(jié)指定使用的顏色索引,。
此外,這個(gè)字節(jié)對(duì)中的第一個(gè)字節(jié)可設(shè)置為0,,聯(lián)合使用第二個(gè)字節(jié)的值表示:

第二個(gè)字節(jié)的值為0:行的結(jié)束,。
第二個(gè)字節(jié)的值為1:圖象結(jié)束。
第二個(gè)字節(jié)的值為2:其后的兩個(gè)字節(jié)表示下一個(gè)象素從當(dāng)前開(kāi)始的水平和垂直位置的偏移量,。

絕對(duì)方式:第一個(gè)字節(jié)設(shè)置為0,,而第二個(gè)字節(jié)設(shè)置為0x03~0xFF之間的一個(gè)值。
在這種方式中,,第二個(gè)字節(jié)表示跟在這個(gè)字節(jié)后面的字節(jié)數(shù),,每個(gè)字節(jié)包含單個(gè)象素的顏色索引。
壓縮數(shù)據(jù)格式需要字邊界(word boundary)對(duì)齊,。下面的例子是用16進(jìn)制表示的8-位壓縮圖象數(shù)據(jù):

03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01
這些壓縮數(shù)據(jù)可解釋為 :

壓縮數(shù)據(jù)

擴(kuò)展數(shù)據(jù)
03 04 04 04 04
05 06 06 06 06 06 06
00 03 45 56 67 00 45 56 67
02 78 78 78
00 02 05 01 從當(dāng)前位置右移5個(gè)位置后向下移一行
02 78 78 78
00 00 行結(jié)束
09 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E
00 01 RLE編碼圖象結(jié)束


BI_RLE4:每個(gè)象素為4比特的RLE壓縮編碼,,同樣也可使用編碼方式和絕對(duì)方式中的任何一種進(jìn)行壓縮,
這兩種方式也可在同一幅圖中的任何地方使用,。這兩種方式是:

編碼方式:由2個(gè)字節(jié)組成,,第一個(gè)字節(jié)指定象素?cái)?shù)目,第二個(gè)字節(jié)包含兩種顏色索引,,一個(gè)在高4位,,另一個(gè)在低4位,。
第一個(gè)象素使用高4位的顏色索引,第二個(gè)使用低4位的顏色索引,,第3個(gè)使用高4位的顏色索引,,依此類推。

絕對(duì)方式:這個(gè)字節(jié)對(duì)中的第一個(gè)字節(jié)設(shè)置為0,,第二個(gè)字節(jié)包含有顏色索引數(shù),,其后續(xù)字節(jié)包含有顏色索引,
顏色索引存放在該字節(jié)的高,、低4位中,,一個(gè)顏色索引對(duì)應(yīng)一個(gè)象素。
此外,,BI_RLE4也同樣聯(lián)合使用第二個(gè)字節(jié)中的值表示:

第二個(gè)字節(jié)的值為0:行的結(jié)束,。
第二個(gè)字節(jié)的值為1:圖象結(jié)束。
第二個(gè)字節(jié)的值為2:其后的兩個(gè)字節(jié)表示下一個(gè)象素從當(dāng)前開(kāi)始的水平和垂直位置的偏移量,。

下面的例子是用16進(jìn)制數(shù)表示的4-位壓縮圖象數(shù)據(jù):

03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01

這些壓縮數(shù)據(jù)可解釋為 :

壓縮數(shù)據(jù)

擴(kuò)展數(shù)據(jù)
03 04 0 4 0
05 06 0 6 0 6 0
00 06 45 56 67 00 4 5 5 6 6 7
04 78 7 8 7 8
00 02 05 01 從當(dāng)前位置右移5個(gè)位置后向下移一行
04 78 7 8 7 8
00 00 行結(jié)束
09 1E 1 E 1 E 1 E 1 E 1
00 01 RLE圖象結(jié)束

3. 彩色表

彩色表包含的元素與位圖所具有的顏色數(shù)相同,,象素的顏色用RGBQUAD結(jié)構(gòu)來(lái)定義。對(duì)于24-位真彩色圖象就不使用彩色表(同樣也包括16位,、和32位位圖),,

typedef struct tagRGBQUAD { /* rgbq */

     BYTE rgbBlue;
     BYTE rgbGreen;
     BYTE rgbRed;
     BYTE rgbReserved;

} RGBQUAD;

其中:

     rgbBlue

     指定藍(lán)色強(qiáng)度

     rgbGreen


     指定綠色強(qiáng)度

     rgbRed


     指定紅色強(qiáng)度

     rgbReserved

     保留,設(shè)置為0

4. 位圖數(shù)據(jù)

緊跟在彩色表之后的是圖象數(shù)據(jù)字節(jié)陣列,。
圖象的每一掃描行由表示圖象象素的連續(xù)的字節(jié)組成,,

每一行的字節(jié)數(shù)取決于圖象的顏色數(shù)目和用象素表示的圖象寬度。
掃描行是由底向上存儲(chǔ)的,,這就是說(shuō),,陣列中的第一個(gè)字節(jié)表示位圖左下角的象素,
而最后一個(gè)字節(jié)表示位圖右上角的象素,。(
只針對(duì)與倒向DIB,,如果是正向 DIB,則掃描行是由頂向下存儲(chǔ)的),,倒向DIB的原點(diǎn)在圖像的左下角,,
而正向DIB的原點(diǎn)在圖像的左上角。同時(shí),,每一掃描行的字節(jié)數(shù)必需是4的整倍數(shù),,也就是DWORD對(duì)齊的。
如果你想確保圖像的掃描行DWORD對(duì)齊,,可使用下面的代碼:

(((width*biBitCount)+31)>>5)<<2

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多