關於C語言讀取BMP文件

之前MATLAB部分遇到一個問題,我在Hough變換完成之後得到的圖像需要進一步的處理,但是我是通過在之前的圖像上用循環遍歷添加上點,這樣的到的圖片使用句柄保存只能得到循環運算之前的原圖,暫時沒有找到解決方法,就先開始準別C語言的讀取BMP文件的方法

C語言讀取BMP文件

以下爲按照BMP格式相搭配的讀取頭文件

/* 位圖文件頭 (位圖頭的字節數 = 位圖文件字節數 - 位圖圖像數據字節數)*/

偏移量 域名稱 大小 內容
0000H 文件標識 2 識別位圖的類型
0002H File Size 4 表示文件的大小,單位是B
0006H Reserved 4 保留信息,用處目前不明只知道必須爲0
000AH Bitmao Data Offset 4 從文件開始到位圖數據之間的偏移量

typedef struct BMP_FILE_HEADER
{
WORD bType; // 文件標識符
DWORD bSize; // 文件的大小
WORD bReserved1; // 保留值,必須設置爲0
WORD bReserved2; // 保留值,必須設置爲0
DWORD bOffset; // 文件頭的最後到圖像數據位開始的偏移量
} BMPFILEHEADER; // 14 字節

/* 位圖信息頭 */

偏移量 域名稱 大小 內容
000EH Bitmap Header Size 4 位圖的信息頭的長度,一般是28H
0012H Width 4 位圖的寬度,單位是像素
0016H Height 4 位圖的高度,單位是像素
001AH Planes 4 位圖的位面數,肯定是1
001CH Bit per pixel 2 每個像素的位數,1\4\8\16\24\32,分別表示2的N次方的色位,單色圖像默認爲1,即只有黑白
001EH Comression 4 壓縮說明,0:不壓縮;1:使用8位RLE壓縮方式;2:使用4位RLE壓縮方式;3:Bitfields-位域存放方式
0022H Bitmap Data SIze 4 用字節數字表示的位圖數據的大小,必須是4的倍數
0026H HResolution 4 用像素表示水平分辨率
002AH VResolution 4 用像素表示垂直分辨率
002EH Colors 4 位圖使用的顏色數
0032H Important Colors 4 指定的重要的顏色數,當數值等於Colors的數值的時候表示所有顏色一樣重要

typedef struct BMP_INFO
{
DWORD bInfoSize; // 信息頭的大小
DWORD bWidth; // 圖像的寬度
DWORD bHeight; // 圖像的高度
WORD bPlanes; // 圖像的位面數
WORD bBitCount; // 每個像素的位數
DWORD bCompression; // 壓縮類型
DWORD bmpImageSize; // 圖像的大小,以字節爲單位
DWORD bXPelsPerMeter; // 水平分辨率
DWORD bYPelsPerMeter; // 垂直分辨率
DWORD bClrUsed; // 使用的色彩數
DWORD bClrImportant; // 重要的顏色數
} BMPINF; // 40 字節

/* 彩色表:調色板 */

偏移量 域名稱 大小 內容
____H Palette N*4 調色板規範,四個字節分別用來描述藍色、綠色、紅色和填充符的數值,在彩色圖像的處理中就是各個通道的作用

typedef struct RGB_QUAD
{
WORD rgbBlue; // 藍色強度
WORD rgbGreen; // 綠色強度
WORD rgbRed; // 紅色強度
WORD rgbReversed; // 保留值
}

之後就是圖像信息數據:

偏移量 域名稱 大小 內容
____H Bitmap Data 包含掃描的信息,掃描順序是從右向左,從上到下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章