2009年11月5日 星期四

HW3

本次作業 : 讀取並顯示 BMP 影像的檔頭資料

練習重點在於 fopen、fread .. 等檔案處理指令
老師第一次講授fopen、fclose、fseek、fread、fwrite時
消化有點不良,自己靠F1、搜尋引擎、MSDN摸索還是沒有多大進展
好在第二個禮拜又講了一次,終於有了點突破
也剛好另一門選修課需要撰寫socket傳送檔案給了莫大幫助
fopen用以開啟或說是建立一個檔案提供讀或寫
fread便是讀取檔案內的資料
//但是關於fread,在VC6.0使用的時候
//其read完資料不會移動指標
//還需要用fseek去指
fseek就是將指標移動到某個位置
fwrite就是將資料寫入到檔案
而最後有開啟就有關閉
關閉就靠fclose
靠摸索程式碼來熟悉用法間接思考指令運作模式
對我而言還是比較有效率的方法~


這次的作業直接接續HW2的轉8 bit灰階影像的程式繼續撰寫
老師是在Load Image時就以Message視窗顯示BMP的資訊
我做了些更改:在程式上加入了一個Show Info的botton
一個GroupBox以及一些Label
程式開啟初始畫面如下圖,為了避免錯誤
//例如:沒有Load進Image就要Show informations 會碰
將botton都暫時設為disable














載入BMP Image時便一併讀取了檔頭裡的檔案資訊
所以Show資料的Button只是純粹切換頁面用的
Show出資訊的Botton在檔案載入後便可以作用了














click botton後就會出現Information的GroupBox
裡面含有
檔案大小、影像寬度、影像長度、水平解析度、
垂直解析度、影像位元(位元深度)、壓縮演算法的影像資訊




















過程中有出現一點小狀況
那就是解析度並非畫面顯示的 96 dpi
而是" 3780 " 這個恐怖的數字
一開始懷疑是byte位置抓錯,但是比對wiki確認無誤後
又懷疑是wiki記載的資訊錯誤 (連這都懷疑似乎有點不明智阿..)
Google大神拜了之後又證明wiki沒有錯 (讓我覺得懷疑wiki是多此一舉)
一頭霧水且一度萌生乾脆把解析度的Label拿掉的念頭..
可是又想說如果拿掉之後..
整個GroupBox的Information看起來就很空虛
忽然在某個為了查詢檔頭的網頁裡看到了

解析度dpi的全名 - dot per inch

頓時豁然開朗啊.... 也沒那麼誇張
只是想到說如果轉換成其他單位看看的話..

這一try就try出了結果
3780 須除以39.3轉換成公尺就可以得到 96這個神奇的數字~

OK 快快樂樂的收工 END

沒有留言:

張貼留言