銆銆BMP鏂囦歡鐢辨枃浠跺ご銆佷綅鍥句俊鎭ご銆侀鑹蹭俊鎭拰鍥懼艦鏁版嵁鍥涢儴鍒嗙粍鎴愩傛枃浠跺ご涓昏鍖呭惈鏂囦歡鐨勫ぇ灝忋佹枃浠剁被鍨嬨佸浘鍍忔暟鎹亸紱繪枃浠跺ご鐨勯暱搴︾瓑淇℃伅錛涗綅鍥句俊鎭ご鍖呭惈鍥捐薄鐨勫昂瀵鎬俊鎭佸浘鍍忕敤鍑犱釜姣旂壒鏁板兼潵琛ㄧず涓涓儚绱犮佸浘鍍忔槸鍚﹀帇緙┿佸浘鍍忔墍鐢ㄧ殑棰滆壊鏁扮瓑淇℃伅銆傞鑹蹭俊鎭寘鍚浘鍍忔墍鐢ㄥ埌鐨勯鑹茶〃錛屾樉紺哄浘鍍忔椂闇鐢ㄥ埌榪欎釜棰滆壊琛ㄦ潵鐢熸垚璋冭壊鏉匡紝浣嗗鏋滃浘鍍忎負(fù)鐪熷僵鑹詫紝鏃㈠浘鍍忕殑姣忎釜鍍忕礌鐢?4涓瘮鐗規(guī)潵琛ㄧず錛屾枃浠朵腑灝辨病鏈夎繖涓鍧椾俊鎭紝涔熷氨涓嶉渶瑕佹搷浣滆皟鑹叉澘銆傛枃浠朵腑鐨勬暟鎹潡琛ㄧず鍥懼儚鐨勭浉搴旂殑鍍忕礌鍊鹼紝闇瑕佹敞鎰忕殑鏄細(xì)鍥懼儚鐨勫儚绱犲煎湪鏂囦歡涓殑瀛樻斁欏哄簭涓轟粠宸﹀埌鍙籌紝浠庝笅鍒頒笂錛屼篃灝辨槸璇達(dá)紝鍦˙MP鏂囦歡涓鍏堝瓨鏀劇殑鏄浘鍍忕殑鏈鍚庝竴琛屽儚绱狅紝鏈鍚庢墠瀛樺偍鍥懼儚鐨勭涓琛屽儚绱狅紝浣嗗涓庡悓涓琛岀殑鍍忕礌錛屽垯鏄寜鐓у厛宸﹁竟鍚庡彸杈圭殑鐨勯『搴忓瓨鍌ㄧ殑錛涘彟澶栦竴涓渶瑕佽鑰呮湅鍙嬪叧娉ㄧ殑緇嗚妭鏄細(xì)鏂囦歡瀛樺偍鍥懼儚鐨勬瘡涓琛屽儚绱犲兼椂錛屽鏋滃瓨鍌ㄨ琛屽儚绱犲兼墍鍗犵殑瀛楄妭鏁頒負(fù)4鐨勫嶆暟錛屽垯姝e父瀛樺偍錛屽惁鍒欙紝闇瑕佸湪鍚庣琛?錛屽噾瓚?鐨勫嶆暟銆?
銆銆2. BMP鏂囦歡澶?
銆銆BMP鏂囦歡澶存暟鎹粨鏋勫惈鏈塀MP鏂囦歡鐨勭被鍨嬨佹枃浠跺ぇ灝忓拰浣嶅浘璧峰浣嶇疆絳変俊鎭傚叾緇撴瀯瀹氫箟濡備笅:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 浣嶅浘鏂囦歡鐨勭被鍨嬶紝蹇呴』涓?#8220;BM”
DWORD bfSize; // 浣嶅浘鏂囦歡鐨勫ぇ灝忥紝浠ュ瓧鑺備負(fù)鍗曚綅
WORD bfReserved1; // 浣嶅浘鏂囦歡淇濈暀瀛楋紝蹇呴』涓?
WORD bfReserved2; // 浣嶅浘鏂囦歡淇濈暀瀛楋紝蹇呴』涓?
DWORD bfOffBits; // 浣嶅浘鏁版嵁鐨勮搗濮嬩綅緗紝浠ョ浉瀵逛簬浣嶅浘鏂囦歡澶寸殑鍋忕Щ閲忚〃紺猴紝浠ュ瓧鑺備負(fù)鍗曚綅
} BITMAPFILEHEADER錛涜緇撴瀯鍗犳嵁14涓瓧鑺傘?
銆銆3. 浣嶅浘淇℃伅澶?
銆銆BMP浣嶅浘淇℃伅澶存暟鎹敤浜庤鏄庝綅鍥劇殑灝哄絳変俊鎭傚叾緇撴瀯濡備笅錛?br>
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 鏈粨鏋勬墍鍗犵敤瀛楄妭鏁?br>LONG biWidth; // 浣嶅浘鐨勫搴︼紝浠ュ儚绱犱負(fù)鍗曚綅
LONG biHeight; // 浣嶅浘鐨勯珮搴︼紝浠ュ儚绱犱負(fù)鍗曚綅
WORD biPlanes; // 鐩爣璁懼鐨勫鉤闈㈡暟涓嶆竻錛屽繀欏諱負(fù)1
WORD biBitCount// 姣忎釜鍍忕礌鎵闇鐨勪綅鏁幫紝蹇呴』鏄?(鍙岃壊), 4(16鑹?錛?(256鑹?鎴?4(鐪熷僵鑹?涔嬩竴
DWORD biCompression; // 浣嶅浘鍘嬬緝綾誨瀷錛屽繀欏繪槸 0(涓嶅帇緙?,1(BI_RLE8鍘嬬緝綾誨瀷)鎴?(BI_RLE4鍘嬬緝綾誨瀷)涔嬩竴
DWORD biSizeImage; // 浣嶅浘鐨勫ぇ灝忥紝浠ュ瓧鑺備負(fù)鍗曚綅
LONG biXPelsPerMeter; // 浣嶅浘姘村鉤鍒嗚鯨鐜囷紝姣忕背鍍忕礌鏁?br>LONG biYPelsPerMeter; // 浣嶅浘鍨傜洿鍒嗚鯨鐜囷紝姣忕背鍍忕礌鏁?br>DWORD biClrUsed;// 浣嶅浘瀹為檯浣跨敤鐨勯鑹茶〃涓殑棰滆壊鏁?br>DWORD biClrImportant;// 浣嶅浘鏄劇ず榪囩▼涓噸瑕佺殑棰滆壊鏁?br>} BITMAPINFOHEADER錛涜緇撴瀯鍗犳嵁40涓瓧鑺傘?
銆銆娉ㄦ剰錛氬浜嶣MP鏂囦歡鏍煎紡錛屽湪澶勭悊鍗曡壊鍥懼儚鍜岀湡褰╄壊鍥懼儚鐨勬椂鍊欙紝鏃犺鍥捐薄鏁版嵁澶氫箞搴炲ぇ錛岄兘涓嶅鍥捐薄鏁版嵁榪涜浠諱綍鍘嬬緝澶勭悊錛屼竴鑸儏鍐典笅錛屽鏋滀綅鍥鵑噰鐢ㄥ帇緙╂牸寮忥紝閭d箞16鑹插浘鍍忛噰鐢≧LE4鍘嬬緝綆楁硶錛?56鑹插浘鍍忛噰鐢≧LE8鍘嬬緝綆楁硶銆?br>
銆銆4. 棰滆壊琛?
銆銆棰滆壊琛ㄧ敤浜庤鏄庝綅鍥句腑鐨勯鑹詫紝瀹冩湁鑻ュ共涓〃欏癸紝姣忎竴涓〃欏規(guī)槸涓涓猂GBQUAD綾誨瀷鐨勭粨鏋勶紝瀹氫箟涓縐嶉鑹層俁GBQUAD緇撴瀯鐨勫畾涔夊涓?
typedef struct tagRGBQUAD {
BYTErgbBlue;// 钃濊壊鐨勪寒搴?鍊艱寖鍥翠負(fù)0-255)
BYTErgbGreen; // 緇胯壊鐨勪寒搴?鍊艱寖鍥翠負(fù)0-255)
BYTErgbRed; // 綰㈣壊鐨勪寒搴?鍊艱寖鍥翠負(fù)0-255)
BYTErgbReserved;// 淇濈暀錛屽繀欏諱負(fù)0
} RGBQUAD;
銆銆棰滆壊琛ㄤ腑RGBQUAD緇撴瀯鏁版嵁鐨勪釜鏁扮敱BITMAPINFOHEADER 涓殑biBitCount欏規(guī)潵紜畾錛屽綋biBitCount=1,4,8鏃訛紝鍒嗗埆鏈?,16,256涓鑹茶〃欏癸紝褰揵iBitCount=24鏃訛紝鍥懼儚涓虹湡褰╄壊錛屽浘鍍忎腑姣忎釜鍍忕礌鐨勯鑹茬敤涓変釜瀛楄妭琛ㄧず錛屽垎鍒搴擱銆丟銆丅鍊鹼紝鍥懼儚鏂囦歡娌℃湁棰滆壊琛ㄩ」銆備綅鍥句俊鎭ご鍜岄鑹茶〃緇勬垚浣嶅浘淇℃伅錛孊ITMAPINFO緇撴瀯瀹氫箟濡備笅:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 浣嶅浘淇℃伅澶?br>RGBQUAD bmiColors[1]; // 棰滆壊琛?br>} BITMAPINFO;
銆銆娉ㄦ剰錛歊GBQUAD鏁版嵁緇撴瀯涓紝澧炲姞浜?jiǎn)涓涓繚鐣欏瓧孌祌gbReserved錛屽畠涓嶄唬琛ㄤ換浣曢鑹詫紝蹇呴』鍙栧浐瀹氱殑鍊間負(fù)“0”錛屽悓鏃訛紝RGBQUAD緇撴瀯涓畾涔夌殑棰滆壊鍊間腑錛岀孩鑹層佺豢鑹插拰钃濊壊鐨勬帓鍒楅『搴忎笌涓鑸湡褰╄壊鍥懼儚鏂囦歡鐨勯鑹叉暟鎹帓鍒楅『搴忔伆濂界浉鍙嶏紝鏃細(xì)鑻ユ煇涓綅鍥句腑鐨勪竴涓儚绱犵偣鐨勯鑹茬殑鎻忚堪涓?#8220;00錛?0錛宖f錛?0”錛屽垯琛ㄧず璇ョ偣涓虹孩鑹詫紝鑰屼笉鏄摑鑹層?br>
銆銆5. 浣嶅浘鏁版嵁
銆銆浣嶅浘鏁版嵁璁板綍浜?jiǎn)浣嶅泟勬瘡涓涓儚绱犲兼垨璇ュ搴斿儚绱犵殑棰滆壊琛ㄧ殑绱㈠紩鍊鹼紝鍥懼儚璁板綍欏哄簭鏄湪鎵弿琛屽唴鏄粠宸﹀埌鍙?鎵弿琛屼箣闂存槸浠庝笅鍒頒笂銆傝繖縐嶆牸寮忔垜浠張縐頒負(fù)Bottom_Up浣嶅浘錛屽綋鐒朵笌涔嬬浉瀵圭殑榪樻湁Up_Down褰㈠紡鐨勪綅鍥撅紝瀹冪殑璁板綍欏哄簭鏄粠涓婂埌涓嬬殑錛屽浜庤繖縐嶅艦寮忕殑浣嶅浘錛屼篃涓嶅瓨鍦ㄥ帇緙╁艦寮忋備綅鍥劇殑涓涓儚绱犲兼墍鍗犵殑瀛楄妭鏁幫細(xì)褰揵iBitCount=1鏃訛紝8涓儚绱犲崰1涓瓧鑺傦紱褰揵iBitCount=4鏃訛紝2涓儚绱犲崰1涓瓧鑺傦紱褰揵iBitCount=8鏃訛紝1涓儚绱犲崰1涓瓧鑺傦紱褰揵iBitCount=24鏃?1涓儚绱犲崰3涓瓧鑺傦紝姝ゆ椂鍥懼儚涓虹湡褰╄壊鍥懼儚銆傚綋鍥懼儚涓嶆槸涓虹湡褰╄壊鏃訛紝鍥懼儚鏂囦歡涓寘鍚鑹茶〃錛屼綅鍥劇殑鏁版嵁琛ㄧず瀵瑰簲鍍忕礌鐐瑰湪棰滆壊琛ㄤ腑鐩稿簲鐨勭儲(chǔ)寮曞鹼紝褰撲負(fù)鐪熷僵鑹叉椂錛屾瘡涓涓儚绱犵敤涓変釜瀛楄妭琛ㄧず鍥懼儚鐩稿簲鍍忕礌鐐瑰僵鑹插鹼紝姣忎釜瀛楄妭鍒嗗埆瀵瑰簲R銆丟銆丅鍒嗛噺鐨勫鹼紝榪欐椂鍊欏浘鍍忔枃浠朵腑娌℃湁棰滆壊琛ㄣ備笂闈㈡垜宸茬粡璁茶繃浜?jiǎn)锛?strong>Windows瑙勫畾鍥懼儚鏂囦歡涓竴涓壂鎻忚鎵鍗犵殑瀛楄妭鏁板繀欏繪槸4鐨勫嶆暟(鍗充互瀛椾負(fù)鍗曚綅),涓嶈凍鐨勪互0濉厖錛屽浘鍍忔枃浠朵腑涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁拌綆楁柟娉曪細(xì)
DataSizePerLine= (biWidth* biBitCount+31)/8錛?/ 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?
鎴栬?br> DataSizePerLine= (biWidth* biBitCount+31)/32 * 4錛?/ 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?/strong>
(濡傛灉biBitCount == 8 鎴?4)
DataSizePerLine= (biWidth* 3+3)/4*4錛?/ 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?
鎴?/p>
DataSizePerLine= (biWidth*1+3)/4*4錛?/ 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?
銆銆浣嶅浘鏁版嵁鐨勫ぇ灝忔寜涓嬪紡璁$畻(涓嶅帇緙╂儏鍐典笅)錛?br>
銆銆DataSize= DataSizePerLine* biHeight銆?
銆銆涓婅堪鏄疊MP鏂囦歡鏍煎紡鐨勮鏄庯紝鎼炴竻妤氫簡(jiǎn)浠ヤ笂鐨勭粨鏋勶紝灝卞彲浠ユ紜殑鎿嶄綔鍥懼儚鏂囦歡錛屽瀹冭繘琛岃鎴栧啓鎿嶄綔浜?jiǎn)銆?br>
杞嚜http://hi.baidu.com/kennlee/blog/item/52375eca63394743f31fe7d8.html

]]>