要使用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...