2009年11月5日 星期四

HW3


這個跟今天要交的作業大同小異,只不過差在於showmessage改成label顯示而已,所以大致來講程式碼是沒有差別的,有之前的經驗,這次作業作的特別的輕鬆,這次跟我上次交的作業多了顯示垂直與水平之解析度,(bSize[0] +bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] *256*256*256)/39.37,原本沒有除以39.37都顯示0,老師講解過後改了程式碼,還是出現0,後來發現好像不能用螢幕截圖,換了張圖片後,他終於顯示出來了,我比較有困惑的是....為什麼螢幕截圖出來的解析度不能顯示出來,又或者是我的程式碼的問題?! 希望老師或其他知道的同學可以幫忙一下,感激不盡~~

HW3


此次程式作業目標是在讀取BMP影像的檔頭資料,然後將其顯示出來。在實做時候有點不知如何下手,在開始時候建立程式介面和對話按鈕。
親自實作邊看著課本,面對不少讀取BMP檔案問題,
怎樣把一張照片載入之後,再點選讀取按鈕,讀取是自己設定撰寫code,用結構struct方式用
最後PSPad這個文書編輯器來檢視檔案的原始內容
就可以得到想要照片fread結果,
是需要去面對了解,建立能轉換圖片位元及讀取的函數以及圖片對話窗語法。
只是稍微內部程式碼修改一下而已,但看似簡單的動作,實際上並不是如此
最後才了解到搭配在一起的功能和作用。
的實用感覺。

HW3



這次的作業 - 讀BMP圖檔檔頭,主要應該是要讓我們練習
fseek - 指標至檔案某資料位址,fread - 讀取指標資料存至變數
並且要我們了解BMP資料的存取方式

一邊參考著維基關於BMP的介紹,把fseek﹐ fread 座標打好
說是這樣說,但對於指標不熟習的我
如果沒有參考程式要自力打出來,一時間還會愣住不知從何下手....

HW3















關於老師上課提到是不是因為大家對於fopen,fread,fseek這些指令比較沒興趣,我想提供我的意見,前兩個作業我確實比較有興趣,從開啟 圖片檔到可以轉灰階或者畫線那些,我覺得都是讓我打出來後會滿有成就感的東西,其實我原先也沒想到才上幾堂課就可以打出這些東西(其實也是因為BCB給的 元件很多)打完前兩個作業我想說可以學到像是照片模糊化或者轉換成不同風格(復古黑白.水彩畫.素描畫.色彩增強)之類的特效,然後對於 fopen,fread和fseek就真的比較沒興趣,可能之後跟影像有做更多的結合打出更多東西我會懂現在教這三個的用意吧,所以還是會好好學!
老師花了將近兩節課檢討這次交作業的情形,其實我覺得收穫滿多的,因為前兩個作業我頂多點自己朋友的文章來看,其的文章我倒是沒逐一看,而且這次我也知道自己也是隨隨便便就交了,
在課堂上看到有些人繳交作業的方式真的讓我很佩服,像我前兩個作業大概就是上傳一下,然後隨意想一下做作業時的想法就PO出來了,但有些同學真的很用心在做這件事情,感覺花了不少時間,所以我覺得我還有很多可以改善的地方~COOL!
結果第三節課的時候,看完別人作品還有聽老師講解之後,實作起來發現一點也不難,唯一碰到的問題就是dpi顯示出來之後值出現三千多(應該顯示72),剛好就問老師怎麼解決,才了解原先顯示的是每公尺所包含的像素點,而每吋是2.54公分,100/2.54=39.3...左右,所以把原本的值除以39.3就正確囉!!

HW3


繼上次教的fopen,fseek,fread等函式,這次終於要來實際使用了,

fopen就是把檔案讀進來,

fseek則是指定指標目前所在的位置,

fread是將目前所在的資料讀進來,

老師用了bmp的檔頭當做示範,

前兩個byte是檔案的類型,像bmp就是BM,

接著有很多資料,這裡只取它的大小、寬度、高度來看,

這些資料還要經過換算才是我們一般所看到的檔案大小,

不過上次上課最後老師教的一次讀完我沒有聽得很懂,所以我不會用那個struct來做。

這次寫的程式比較沒有什麼問題,因為寫法都差不多,會一個以後就幾乎都寫得出來了。



更新程式介面,

與原先的比較加了水平解析度與垂直解析度上去,

原先是不會算這兩項數值,

經過同學指導之後知道要把拿到的資料要去除以英寸計算,

所以就加上去了。

HW3

這次作業,其實對我而言還滿難的,以下圖片分邊顯示出BM 4串數字 圖的大小 圖的寬 跟圖的高
上課上了那麼久,單純得靠我自己一個還是無法做出來,也許是我不夠認真 ,但我會努力


BM
4串數字
圖的大小
圖的寬
圖的高

HW3

讀出格式為"bmp"

一串數字@@

File size = 檔案大小

File Width = 相片寬度






File High =相片高度
其實這次作業讓我死了很多的腦細胞 XD
BCB看起來很簡單但From用好之後
要打程式碼卻突然覺得很詞窮=..=
這種狀況感覺很窘
努力學努力看書努力上課 XD

HW3



原本交的作業,不夠用心,也不是老師要的方式。經過老師對我們作業的檢討,了解到很多東西,甚至到了將來,有一份22K的工作要不要做,其中也有需多涵意有待我們省思。
這次是將圖檔的資料由ShowMessage改放在Label上,因為Vista的BMP內容沒有顯示水平和垂直解析度,因此補上jpg的內容圖。
這次的作業也讓我們練習了fopen、fseek、fread,在wiki中也可以查到用fseek去找bmp相關資訊的記憶體位置,還有要算水平和垂直解析度時,這個 bSize[0] +bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] *256*256*256還要記得除上39.37,因為原本是公尺,要將其換算成英吋才是正確的。最後一個遇到的問題是有些圖片的水平和垂直解析度會顯示為0,發現有些同學好像也會有同樣的情況,不過後來看到老師的回應才知道如果用PSPad檢查如果沒有存有這項資料就會讀不出來呀。

HW3















第三周作業要做出讀取BMP影像的檔頭資料,然後將資料顯示出來。在做水平解析度垂直解析度當中遇到了問題,就是做出來的結果跟圖片內容裡的結果完全不同,我卡在這邊一直做不出來,上網查資料後終於找到問題,就是要把bSize[0] +bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] *256*256*256除以39.37,否則顯示出來的結果就會跟圖片內容的結果不一樣,再來就是把fseek(imBMP,**,SEEK_SET);的**改成38、42就能做出水平解析度和垂直解析度了。

HW3

           這是最一開始把圖片讀進程式內。

           第一個跳出的視窗顯示此圖片為BMP檔




這裡顯示出4串數字
           這張圖片顯示出它的大小佔用多少位元組。



           顯示此張圖片寬度由左邊圖片內容對照。



           顯使圖片的高度由左邊圖片內容對照。



老師這週交的內容,一開始程式碼打好之後,卻一直跑不出來,原來是前面忘了加上


stdio.h的標頭檔


後來在課堂上就已經慢慢弄懂了,因為老師有提供程式碼,


先告訴我們寬度如何去設定,讓它算出來然後顯示在視窗上,


主要用到fopen、fread、fseek。


iFileSize = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;

這是主要的算法,當然高度也是一樣畫葫蘆就可以算出來了,後來老師在課程即將結束前又提供了另一種程式碼,告訴我們可以不需要寫這麼多,只要設定一些東西就可以讓它一樣算出我們想要的東西,但是下課時間一到心就飄走了,並不是很仔細的聽.....如果可以的話,希望老師上課時能再幫我們講解一遍。另外還很好奇的是,如果要讓圖片內容所呈現的資料,都顯示出來,那是不是後續的算法又變的不大相同?試著用自己的想法去打出一些程式碼,可是往往就是一堆bug.....我也知道只要有辦法自己除錯完成的話,那後面學到的就都是自己的了,可是偏偏邏輯思考能力還是略顯不足,要自己想出一串正確的程式碼還是顯得有些吃力.......
這是老師說需要把原本跳出視窗的資料一一顯示在介面上的,其實這個並不難,只要把"showmessage改成Label->Caption="就可以了,可是我發現了一個問題....解析度的公式就是之前bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;除39.37,可是我不管怎麼改程式碼顯示出的解析度,都不大對.....其他資料都正常顯示了....可是解析度就是怪怪的。