關於BMP檔案的讀取

2021-05-25 00:35:37 字數 2178 閱讀 2410

要使用jpeg如上

想必大家對bmp檔案的操作並不陌生,只是最近存在的乙個問題讓我百思不得其解,顯示的顏色不對,而且出現了明顯的傾斜現象,將該jpeg轉為bmp,然後對其進行操作。在vc環境下使用的顯示方式是呼叫dc的setpixel方法。

如今已經得出了原因,是bisizeimage與的大小不一致產生的。現將**分享如下,得出正確顯示。

首先定義了資料結構

typedef struct bitmap_file_tag

bitmap_file, *bitmap_file_ptr;

讀取點陣圖的程式如下:

cstring strfilter = "位**件(*.bmp)|*.bmp|所有檔案(*.*)|*.*||"; //filter file

cfiledialog dlg(true,   //opendialog

null,   //

null,   //

null,   //

strfilter,  //

this);   //

if (!dlg.domodal() == idok)  //

cstring strfilename;

strfilename = dlg.getfilename();     

//bitmapinfo

bitmapinfo *pbmpinfo;

//dib

byte* pbmpdata;

cfile myfile;

if (!myfile.open(strfilename,cfile::moderead|cfile::typebinary))

bitmapfileheader bmpheader;   //fileheader

if (myfile.read(&bmpheader, sizeof(bmpheader)) != sizeof(bmpheader))

if (bmpheader.bftype != 0x4d42)   //'bm'

bitmapinfoheader bmpinfo;   //infoheader

if (myfile.read(&bmpinfo, sizeof(bmpinfo)) != sizeof(bmpinfo))

if (bmpinfo.bibitcount != 24)   //judge 24bit map

pbmpinfo = (bitmapinfo*)new char[sizeof(bitmapinfoheader)]; //only use the bitmapinfoheader

//palette not used,

//cast bitmapinfoheader to bitmapinfo

if (!pbmpinfo)

memcpy(pbmpinfo, &bmpinfo, sizeof(bitmapinfoheader)); //cpy bmpinfo to the point pbmpinfo

dword databytes = bmpheader.bfsize - bmpheader.bfoffbits; //bfsize:size of bimap file

dword delta = (databytes/bmpinfo.biheight - bmpinfo.biwidth*3);              //databytes:the pixels size

pbmpdata = (byte*)new char[databytes];

if (!pbmpdata)

if (myfile.read(pbmpdata, databytes) != databytes)

else

} for (int i=0;i

for (int j=0;jsetpixel(j, bmpinfo.biheight-1-i,  

rgb(rgb[i*bmpinfo.biwidth+j].rgbtred, 

rgb[i*bmpinfo.biwidth+j].rgbtgreen, 

rgb[i*bmpinfo.biwidth+j].rgbtblue));

for (int k=0; k<1000; k++) ; //延時}

delete pbmpinfo;

delete pbmpdata;

delete rgb;

}

當然簡單的方法也是有的,那就是呼叫stretchdibits

BMP檔案的讀取

執行測試效果 void cmyview onreadbmp if strfilepath file fp fopen strfilepath,r bitmapfileheader fileheader bitmapinfo info fread fileheader,sizeof fileheade...

BMP檔案讀取的程式

最近做乙個影象處理的作業,寫了個bmp檔案讀取的程式。在網上找了些資料,還是當作學習筆記記下來,以後也好看看。讀取的檔案是cameraman.bmp黑白影象,256 256 256色的。include include using namespace std typedef unsigned char...

讀取bmp檔案頭出錯

typedef struct tagbitmapfileheader bitmapfileheader bitmapfileheader bf bitmapinfoheader bi word bftype fread bftype,1,2,f1 coutcout 開始 如上,讀取的bf.bfsiz...