c語言讀取bmp檔案

2021-08-11 14:51:28 字數 3093 閱讀 9283

一、了解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...