[問題] BMP Header

看板C_and_CPP作者 (sky)時間10年前 (2014/10/22 09:10), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.53.61 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1413969027.A.612.html

10/22 19:24, , 1F
header寫入二次...
10/22 19:24, 1F

10/22 20:52, , 2F
buf裡的h.w不是300.400,其它沒細看
10/22 20:52, 2F

10/23 10:01, , 3F
問題已解決 感謝兩位的幫忙
10/23 10:01, 3F
文章代碼(AID): #1KHtI3OI (C_and_CPP)