[問題] BMP Header

作者: sky391 (sky)   2014-10-22 17:10:24
BCB C++
目前顯示BMP和原本預估不一樣
應該是bmp format格是錯誤
參考了很多網路的教學
改來改去還是沒有成功
想請板上大大幫忙
我的圖是400*300
不知道是哪邊錯誤?
我在bmp width寫400
bmp height= 300
顯示出來圖更小
改了16進制也是錯誤
code 如下
unsigned char header[54] = {
0x42, // identity : B
0x4d, // identity : M
0, 0, 0, 0, // file size
0, 0, // reserved1
0, 0, // reserved2
54, 0, 0, 0, // RGB data offset
40, 0, 0, 0, // struct BITMAPINFOHEADER size
200, 0, 0, 0, // bmp width
200, 0, 0, 0, // bmp height
1, 0, // planes
24, 0, // bit per pixel
0, 0, 0, 0, // compression
0, 0, 0, 0, // data size
0, 0, 0, 0, // h resolution
0, 0, 0, 0, // v resolution
0, 0, 0, 0, // used colors
0, 0, 0, 0 // important colors
};
unsigned char *bmp_buf = (unsigned char*)malloc( 54 + w * h * 3);
for(int k = 0;k<54;k++)
{
bmp_buf[k] = header[k];
}
for(j =0 ; j < h ; j++){
for(i = 0 ; i < w ; i++) {
bmp_buf[ (j*w+i)*3 + 54] = colBB[(j*w+i)*3]; //B
bmp_buf[ (j*w+i)*3 +1 + 54] = colGG[(j*w+i)*3+1]; //G
bmp_buf[ (j*w+i)*3 +2 + 54] = colRR[(j*w+i)*3+2]; //R
}
}
TMemoryStream *memStream = new TMemoryStream();
memStream->SetSize(w*3*h+54);
memStream->Clear();
// 寫檔頭與資料
memStream->Write(header,54);
memStream->Write(bmp_buf,(w*3*h));
// 要把 Position 歸回零,這樣 Image 元件才可以從 stream 的頭開始讀
memStream->Position = 0;
CalibrationImage->Picture->Bitmap->LoadFromStream(memStream);
跑出結果圖連結如下
http://ppt.cc/tYcu
作者: pico2k (風月)   2014-10-22 19:24:00
header寫入二次...
作者: EdisonX (卡卡獸)   2014-10-22 20:52:00
buf裡的h.w不是300.400,其它沒細看
作者: sky391 (sky)   2014-10-23 10:01:00
問題已解決 感謝兩位的幫忙

Links booklink

Contact Us: admin [ a t ] ucptt.com