2009年11月5日 星期四

HW3

要讀出BMP檔的資料阿...
上個禮拜老師開放了兩個版本的原始碼
我原本想研究typedef的

好吧
基於時間緊迫
我只好使用簡單版的

大概是使用到fread,fseek,fopen指令
上上禮拜在摸索的時候非常困擾
因為我找到的資料不是在BCB環境的
雖然一樣是C++
可是要融入選單指令讓我想了三節課還想不出來...

fopen(OpenPictureDialog1->FileName.c_str(), "r")

就這一行...



我們先看看檔案資料



1024*768
2.25MB(換算2359296Bytes)



讀進來了!!



檔案大小好像有些微差距...


來個小小的筆記好了
在一開始fread(cBuffer, 1, 2, imBMP);這段敘述中
1,2的意思就像是要求cBuffer開兩個各為1Byte的位子
讀取圖檔(從頭)的前兩個位子
也就是點陣圖頭的位元組 #0跟1

之後接著fread(bSize, 1, 4, imBMP);
會直接從點陣圖頭的位元組 #2接下去4個(#2,3,4,5)

可是我們要的圖檔寬度在#18
所以就使用fseek(imBMP,18,SEEK_SET);
將位置指向位元組 #18


我有些小疑問

照WIKI上面說的
DWORD值之後是保留部分,留做以後的擴展使用,對實際的解碼格式沒有影響。
我們在讀取檔案大小時,打的程式碼應該是指向保留部分(#6,7,8,9)
為什麼會變出檔案大小?

還有就是cBuffer的部分
既然我們只需要用到兩個陣列索引
為什麼要開三個索引,再把最後一個索引變成null...?

1 則留言:

  1. 字串的結束符號為NULL, 這項在顯示字串的時候, 才會正常結束。

    回覆刪除