一、了解bmp檔案的格式:位**件頭、位圖資訊段、調色盤資訊(一般都沒有)、位圖資料,各部分關鍵字段。
詳細資訊參見:
讀取bmp檔案的函式所需要的標頭檔案:
#include
#include
#include
#include
#include "bmpstru.h"
#define malloc(type, n) (type *)malloc(n * sizeof(type))
二中的結構體定義我建立了乙個標頭檔案 "bmpstru.h",並且將該函式封裝了,以後使用直接呼叫。
二、bmpstru.h中構造位**件頭、位圖資訊段、位圖資料結構體
1)位**件頭
typedef struct bmpheader bmpheader;
2)位圖資訊段
typedef struct bmpinfoheader bmpinfoheader;
3)位圖資料
typedef struct bmpmatabmpdata;
三、讀取bmp檔案函式用fopen()開啟檔案,並判斷是否開啟成功
if((file = fopen(filename, "rb")) == null)
四、讀取bmp檔案函式初始化位**件頭、位圖資訊段
//讀取bmp的bmpheader資訊
memset(tmp, 0, 20);
fread(tmp, 1, 1, file);
fread(&tmp[1], 1, 1, file);
//itoa(tmp[0], &pic.bmphd.bftype[0], 10);
//itoa(tmp[1], &pic.bmphd.bftype[1], 10);
//printf("success...");
//system("pause");
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmphd.bfsize = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 2, file);
pic.bmphd.bfreserved1 = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 2, file);
pic.bmphd.bfreserved2 = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmphd.bfoffbits = tmp[0];
//讀取bmp的bmpinfoheader資訊
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.bisize = tmp[0];
//影象width
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.biwidth = tmp[0];
//影象height
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.biheight = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1,2, file);
pic.bmpinfohd.bitplanes = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 2, file);
pic.bmpinfohd.bibitcount = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.bicompression = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.bisizeimage = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.bixpelspermeter = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.biypelspermeter = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.biclrused = tmp[0];
memset(tmp, 0, 20);
fread(tmp, 1, 4, file);
pic.bmpinfohd.biclrimportant = tmp[0];
獲得了的高和寬:pic.bmpinfohd.biwidth、 pic.bmpinfohd.biheight;
五、構造二維陣列,並讀取rgb值
bmpdata **pixel = malloc(bmpdata *, pic.bmpinfohd.biheight);
for(int i = 0; i < pic.bmpinfohd.biheight; i++)
for(int i = 0; i < pic.bmpinfohd.biheight; i++)
for(int j = 0; j < pic.bmpinfohd.biwidth; j++)
經過上述5步,bmp檔案的rgb值就儲存到pixel二維陣列中了
使用C語言讀取bmp檔案資料
2014 9 24 02 23 讀取bmp資訊.cpp author 王炳華 執行此檔案,在同目錄下存放乙個名為dog.bmp的,格式必須為bmp include include define bmptype 19778 bool isbmp file f int multiply 2 int i ...
c語言讀取bmp檔案完整版
include include 定義word為兩個位元組的型別 typedef unsigned short word 定義dword為四個位元組的型別 typedef unsigned long dword 位 件頭主要是對位 件的一些描述 位圖資訊頭主要是對位圖影象方面資訊的描述 位圖標準資訊 ...
BMP檔案的讀取
執行測試效果 void cmyview onreadbmp if strfilepath file fp fopen strfilepath,r bitmapfileheader fileheader bitmapinfo info fread fileheader,sizeof fileheade...