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

分享

Bmp文件格式

 ShaneWu 2008-03-28
bmp文件大體上分成四個(gè)部分,,如圖1所示,。
圖1. Windows位圖文件結(jié)構(gòu)示意圖
第一部分為位圖文件頭BITMAPFILEHEADER,,是一個(gè)結(jié)構(gòu),其定義如下:
typedef struct tagBITMAPFILEHEADER {
WORD    bfType;
DWORD   bfSize;
WORD    bfReserved1;
WORD    bfReserved2;
DWORD   bfOffBits;
} BITMAPFILEHEADER;
這個(gè)結(jié)構(gòu)的長(zhǎng)度是固定的,,為14個(gè)字節(jié)(WORD為無(wú)符號(hào)16位整數(shù),,DWORD為無(wú)符號(hào)32位整數(shù)),各個(gè)域的說(shuō)明如下:
bfType
指定文件類型,,必須是0x424D,,即字符串”BM”,也就是說(shuō)所有.bmp文件的頭兩個(gè)字節(jié)都是”BM”
bfSize
指定文件大小,,包括這14個(gè)字節(jié)
bfReserved1,,bfReserved2
為保留字,不用考慮
bfOffBits
為從文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù),,即圖1中前三個(gè)部分的長(zhǎng)度之和,。
第二部分為位圖信息頭BITMAPINFOHEADER,也是一個(gè)結(jié)構(gòu),,其定義如下:
typedef struct tagBITMAPINFOHEADER{
DWORD  biSize;
LONG   biWidth;
LONG   biHeight;
WORD   biPlanes;
WORD   biBitCount
DWORD  biCompression;
DWORD  biSizeImage;
LONG   biXPelsPerMeter;
LONG   biYPelsPerMeter;
DWORD  biClrUsed;
DWORD  biClrImportant;
} BITMAPINFOHEADER;
這個(gè)結(jié)構(gòu)的長(zhǎng)度是固定的,,為40個(gè)字節(jié)(WORD為無(wú)符號(hào)16位整數(shù),DWORD無(wú)符號(hào)32位整數(shù),LONG為32位整數(shù)),,各個(gè)域的說(shuō)明如下:
biSize
指定這個(gè)結(jié)構(gòu)的長(zhǎng)度,,為40
biWidth
指定圖象的寬度,單位是象素
biHeight
指定圖象的高度,,單位是象素
biPlanes
必須是1,,不用考慮
biBitCount
指定表示顏色時(shí)要用到的位數(shù),常用的值為1(黑白二色圖), 4(16色圖), 8(256色), 24(真彩色圖)(新的.bmp格式支持32位色,,這里就不做討論了),。
biCompression
指定位圖是否壓縮,有效的值為BI_RGB,,BI_RLE8,,BI_RLE4,BI_BITFIELDS(都是一些Windows定義好的常量),。要說(shuō)明的是,,Windows位圖可以采用RLE4,,和RLE8的壓縮格式,,但用的不多。我們今后所討論的只有第一種不壓縮的情況,,即biCompression為BI_RGB的情況,。
biSizeImage
指定實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實(shí)也可以從以下的公式中計(jì)算出來(lái):  biSizeImage=biWidth’ * biHeight
要注意的是:上述公式中的biWidth’必須是4的整倍數(shù)(所以不是biWidth,,而是biWidth’,,表示大于或等于biWidth的,,離4最近的整倍數(shù)。舉個(gè)例子,,如果biWidth=240,,則biWidth’=240;如果biWidth=241,,biWidth’=244)
如果biCompression為BI_RGB,,則該項(xiàng)可能為零
biXPelsPerMeter
指定目標(biāo)設(shè)備的水平分辨率,單位是每米的象素個(gè)數(shù),,關(guān)于分辨率的概念,,我們將在打印部分詳細(xì)介紹。
biYPelsPerMeter
指定目標(biāo)設(shè)備的垂直分辨率,,單位同上,。
biClrUsed
指定本圖象實(shí)際用到的顏色數(shù),如果該值為零,,則用到的顏色數(shù)為2的biBitCount次方,。
biClrImportant
指定本圖象中重要的顏色數(shù),如果該值為零,,則認(rèn)為所有的顏色都是重要的,。
第三部分為調(diào)色板(Palette),當(dāng)然,,這里是對(duì)那些需要調(diào)色板的位圖文件而言的,。有些位圖,如真彩色圖,,前面已經(jīng)講過(guò),,是不需要調(diào)色板的,BITMAPINFOHEADER后直接是位圖數(shù)據(jù),。
調(diào)色板實(shí)際上是一個(gè)數(shù)組,,共有biClrUsed個(gè)元素(如果該值為零,則有2的biBitCount次方個(gè)元素),。數(shù)組中每個(gè)元素的類型是一個(gè)RGBQUAD結(jié)構(gòu),,占4個(gè)字節(jié),其定義如下:
typedef struct tagRGBQUAD {
BYTE    rgbBlue; //該顏色的藍(lán)色分量
BYTE    rgbGreen; //該顏色的綠色分量
BYTE    rgbRed; //該顏色的紅色分量
BYTE    rgbReserved; //保留值
} RGBQUAD;
第四部分就是實(shí)際的圖象數(shù)據(jù)了,。對(duì)于用到調(diào)色板的位圖,,圖象數(shù)據(jù)就是該像素顏在調(diào)色板中的索引值,對(duì)于真彩色圖,,圖象數(shù)據(jù)就是實(shí)際的R,G,B值,。下面就2色,16色,256色位圖和真彩色位圖分別介紹,。
對(duì)于2色位圖,,用1位就可以表示該像素的顏色(一般0表示黑,1表示白),,所以一個(gè)字節(jié)可以表示8個(gè)像素,。
對(duì)于16色位圖,用4位可以表示一個(gè)像素的顏色,,所以一個(gè)字節(jié)可以表示2個(gè)像素,。
對(duì)于256色位圖,一個(gè)字節(jié)剛好可以表示1個(gè)像素,。
對(duì)于真彩色圖,,三個(gè)字節(jié)才能表示1個(gè)像素。
要注意兩點(diǎn):
1.  每一行的字節(jié)數(shù)必須是4的整倍數(shù),,如果不是,,則需要補(bǔ)齊。
2.  一般來(lái)說(shuō),,.BMP文件的數(shù)據(jù)從下到上,,從左到右的。也就是說(shuō),,從文件中最先讀到的是圖象最下面一行的左邊

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)論公約

    類似文章 更多