位图笔记
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
位圖文件由三部分組成:文件頭 + 位圖信息 + 位圖像素數(shù)據(jù)
位圖文件頭。位圖文件頭主要用于識別位圖文件。以下是位圖文件頭結(jié)構(gòu)的定義:
typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;其中的bfType值應(yīng)該是“BM”(0x4d42),標(biāo)志該文件是位圖文件。bfSize的值是位圖文件的大小。
位圖信息中所記錄的值用于分配內(nèi)存,設(shè)置調(diào)色板信息,讀取像素值等。
以下是位圖信息結(jié)構(gòu)的定義:
?
typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors[1]; } BITMAPINFO;可見位圖信息也是由兩部分組成的:位圖信息頭 + 顏色表
顏色表是由顏色表項組成的,顏色表項結(jié)構(gòu)的定義如下:
typedef struct tagRGBQUAD { // rgbq BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;其中需要注意的問題是,RGBQUAD結(jié)構(gòu)中的顏色順序是BGR,而不是平常的RGB。
位圖信息頭包含了單個像素所用字節(jié)數(shù)以及描述顏色的格式,此外還包括位圖的寬度、高度、目標(biāo)設(shè)備的位平面數(shù)、圖像的壓縮格式。以下是位圖信息頭結(jié)構(gòu)的定義:
typedef struct tagBITMAPINFOHEADER{ // bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;下表是對結(jié)構(gòu)體當(dāng)中各個成員的說明:
| 結(jié)構(gòu)成員 | 說 明 |
| biSize | 結(jié)構(gòu)BITMAPINFOHEADER的字節(jié)數(shù),即sizeof(BITMAPINFOHEADER)* |
| biWidth | 以像素為單位的圖像寬度* |
| biHeight | 以像素為單位的圖像長度* |
| biplanes | 目標(biāo)設(shè)備的位平面數(shù) |
| biBitCount | 每個像素的位數(shù)*(1) |
| biCompression | 圖像的壓縮格式(這個值幾乎總是為0) |
| biSizeImage | 以字節(jié)為單位的圖像數(shù)據(jù)的大小(對BI_RGB壓縮方式而言) |
| biXPelsPermeter | 水平方向上的每米的像素個數(shù) |
| biYpelsPerMeter | 垂直方向上的每米的像素個數(shù) |
| biClrused | 調(diào)色板中實際使用的顏色數(shù)(2) |
| biClrImportant | 現(xiàn)實位圖時必須的顏色數(shù)(3) |
說明:*是需要加以注意的部分,因為它們是我們在進行位圖操作時經(jīng)常參考的變量
轉(zhuǎn)載于:https://my.oschina.net/DCode/blog/308869
總結(jié)
- 上一篇: 500 OOPS:cannot chan
- 下一篇: ASP.Net TextBox控件只允许