標籤:完全 檔案頭 width code ESS 判斷 short type 知識點
VC++數位影像處理 楊淑瀅
本文對該老師的代碼進行總結,代碼小白順便補充一下自己比較困惑的知識點,方便後續複習。
| 位元影像檔案頭結構BITMAPFILEHEADER |
| 位元影像資訊頭結構BITMAPINFOHEADER |
| 位元影像顏色表RGBQUAD |
| 位元影像像素資料部分 |
- 單色映像:有兩個值:0,255其中0表示黑,255表示白(也可以進行歸一化處理為0和1)。
- 灰階映像:帶有顏色表,相當於索引表。RGB的分量值相同。
- 偽彩色映像:RGB的分量不完全相同,帶有顏色表,相當於索引,整個映像256種顏色。
- 24位真彩色映像:沒有調色表,RGB三分量各佔8位。
在c++中如果用typedef的話:
struct Student
{
int a;
}stu1;//stu1是一個變數
typedef struct Student2
{
int a;
}stu2;//stu2是一個結構體類型=struct Student
即在C++中用typedef相當於重新命名操作,相當於對struct後面的變數重新命名。
- 對於變數中的類型別名問題—引入標頭檔“windowsX.h"
windef.h——基本型態定義
winbase.h——Kernel函數
wingdi.h——圖形裝置介面函數
winuser.h——使用者介面函數
其中這裡主要使用的是第一個應用:基本形態定義,這裡面定義了宏,方便後面的使用。
1 typedef unsigned long DWORD; 2 typedef int BOOL;3 typedef unsigned char BYTE; 4 typedef unsigned short WORD;5 typedef float FLOAT;
於是可以將BMP映像的格式用代碼的方式展現出來
位元影像檔案頭:
1 typedef struct tagBITMAPFILEHEADER2 {3 WORD bftype;//表示2個位元組,16位的短整數,用來判斷是否為位元影像檔案類型4 DWORD bfsize;//表示4個位元組,位元影像檔案的大小。5 WORD bfReaserved1;//位元影像檔案的保留字,必須為0.6 WORD bfReaserved2;//位元影像檔案的保留字,必須為07 DWORD bfOffBits;//表示資料的起始位置 8 } BITMAPFILEHEADER;
位元影像資訊頭:
typedef struct tagBITMAPINFOHEADER{DWORD biSize;//本結構所佔用位元組數LONG biWidth;//位元影像的寬度,以像素為單位LONG biHeight;//位元影像的高度,以像素為單位WORD biPlanes;//目標裝置的層級,必須為1WORD biBitCount;//每個像素所需的位元,1、4、8、24DWORD biCompression;/*位元影像壓縮類型,必須為0(不壓縮)、1(BI_RLE8壓縮類型)、2(BI_RLE4壓縮類型)之一*/DWORD biSizeImage;//位元影像的大小,以位元組為單位LONG biXPelsPerMeter;//位元影像水平解析度,每米像素數LONG biYPelsPerMeter;//位元影像垂直解析度,每米像素數DWORD biClrUsed;//位元影像實際使用的顏色表的顏色數DWORD biClrImportant;//位元影像顯示過程中重要的顏色數}BITMAPINFOHEADER;
顏色表:
typedef struct tagRGBQUAD{BYTE rgbBlue;//藍色的亮度(0~255)BYTE rgbGreen;//綠色BYTE rgbRed;//紅色BYTE rgbReserved;//保留,必須為0}RGBQUAD;
把結構體構造結束之後,來構造BMP檔案的類:
數位影像處理—學習總結