星期三, 11月 18, 2009

Week 09: BMP format (3)

第四個作業 (Homework 4):

 請讀取一張 BMP 影像, 並將其影像內容顯示於 C++ Builder 的影像元件之中。

範例程式: DMC-2009F-SP04.txt

說明:

這個範例程式已經成功地解決同學們在課堂上, 如果沒有把 fseek 加入到迴圈中, 無法正確讀取影像內容的問題, 經過實驗發現, fread 從檔案中成功讀取資料後, 確實會自動將指標移到下一筆資料, 不需要我們用 fseek 指令設定; 然而, fread 會讀取失敗(傳回值為 0 ), 是因為在開啟檔案時, 必須設定開啟模式為"rb"。
imBMP = fopen(OpenDialog1->FileName.c_str(), "rb");
然而, 這個程式還沒有處理 bmp 在儲存處理影像時, 把每一橫列所需的byte數都對齊為 4 的倍數的狀況。假設, 一張 24-bit 彩色影像的寬度為 250, 每一橫列所需之記憶體為 250 * BitCount / 8 = 750, 那麼在存成 bmp 檔時, 每一行最後會補上 2 bytes, 一共需要 752 bytes。

因此, 如果要用上面的範例程式讀取一張彩色影像, 其寬度不是 4 的倍數時, 就會發生錯誤的情況。

以下是一張影像寬度為 250 的影像。



用本範例程式讀取出來的結果。


 

沒有留言:

張貼留言