顯示具有 97361000 李翼豪 標籤的文章。 顯示所有文章
顯示具有 97361000 李翼豪 標籤的文章。 顯示所有文章

2010年1月16日 星期六

HW8

我覺得我在這學期的這門課還算挺有收穫的,
在這學期我學到了關於處理圖檔(BMP和JPG)和聲音檔的學問,
不只是了解了這些多媒體檔案的格式內容及來龍去脈,
也親自動手寫了程式去做讀取、展現及相關操作,
讓我的程式功力更上一層樓,因此我覺得這學期我還算挺有收穫的。

不過我一直覺得我還學得不夠,雖然在多媒體這塊學到的還算廣
(學了BMP、GIF、WVA)有了影像及聲音,
如果再加個動畫那就幾乎可以涵蓋多媒體了,
不過我目前還學的不夠深入,有點學了很多卻只學到了毛皮的感覺,
未來出去找工作如果只會寫"讀取BMP檔"的程式?
或是"畫出GIF檔的調色盤"?不夠吧?
當然我也清楚一學期18周最多54個小時,
老師能教的,學生能吸收的,都很有限。

如果老師教太快,學生恐怕會沒辦法負荷;
老師教太慢,能學到的東西又太少,真是進退兩難阿!
不過俗話說:師父引進門,修行靠個人。
這句話一點也不假,老師不可能再有限的時間裡把所有的知識傳授給我們
,就算能辦到我們能不能學會又是另一回事阿!

HW7


這個程式大概是我寫過最瘋狂的的程式之一吧!

我的作業除了印出wav檔頭的資訊外,還新增了一個印出wav波形的功能,
這個波形是我用字元符號"."和"●"去畫的,也因為如此看起來不太好看,
不過這不是重點,重點是這波形到底代表的是甚麼呢?
其實我還不太清楚...((眾歐

說穿了我只是把該wav檔的內容以不同的資料型態去存,
上圖左邊以BYTE資料型態去存,
右半邊以unsigned int去存(存到的數很大)。

接著為了把它以"波形"的樣貌顯示,
我把BYTE變數再減230(實際上大約等於250左右)並印到Memo1上,
波形的話我用AnsiString資料型態用迴圈去累加"."這個符號,
加完後再累加一個"●",如Memo2上所顯示;

再來我又以不同的資料形態去存(unsigned int),
因為存到的數實在太大了,為了要方便顯示波形,
我把unsigned int這變數取4294000000的餘數,再除以10000(會減少4位數),
大概就等於0~100之間(實際上約等於4294000000~4295000000),
接著最後印出波形的部分也跟前面提到的一樣。

以下是我的部分程式碼:

for(int i=0;i<="尾";i++)
{
AnsiString str="";
fseek (ptr,"頭"+i*4,SEEK_SET);
fread(data, 1, 4, ptr);
data[0]=data[0]%4294000000;
data[0]=data[0]/10000;
for(int j=0;j<=data[0];j++)
{ str=str+".";
}
str=str+"●";
Memo4->Lines->Add(AnsiString(str));
Memo3->Lines->Add(AnsiString(data[0]));

}

雖然寫完這程式我知道這可能會與老師的要求不太一樣,
不過我想概念應該差不了太遠才對,就跟圖檔一樣,
除了檔頭部分其他的資料應該就是該圖片的內容,
我們為了要真正看到圖片所長的樣子,才會利用撰寫程式以不同的方式來展現該檔案。
我寫程式時一向很喜歡用很直覺的方式去思考,
反而不太喜歡用內建的函數及物件等等,因為如果是第一次使用的話,
八九成都不太會用,甚至可以說完全不會用!
一定要去查資料來好好熟悉一番,如此才能用的得心應手;
不過其實這也不能說是不喜歡拉,因為有了這些函數及物件等,寫起程式來真的是事半功倍,
畢竟這樣才有利於大型程式的發展阿。
假如沒有這些高階語言,而用類似像低階的組合語言寫(?!)會瘋掉吧。



2010年1月15日 星期五

HW5

這次的作業呢是把GIF影像讀取印出並且把GIF的調色盤畫出,
雖然這次的作業一樣是跟影像的讀取有關,不過前面四次都是BMP檔,
而這次是讀取GIF檔,並且與BMP檔不太一樣的是GIF檔有調色盤,
所有會用到的顏色都會在調色盤上。

GIF最大的優點就是檔案不大,極適合在網頁上應用,
要是圖檔太大開啟一個網頁上的圖可是要等一段時間的,當然誰都不喜歡等。
不過其缺點是影像品質不太好,原因之一就是該圖最多也只有256色,
因此這並不適合在拍照上應用。

寫程式的部分我參考了老師的程式碼,不過也因為這是老師寫的,
有些地方看的不是很懂,比如像是個個變數所代表的意義等等,
而老師的程式中也用了不少的變數呢。

在畫調色盤的程式部分,程式架構就是用兩個迴圈去做,
就像之前讀取BMP檔,搭配fread與fseek使用,把讀到的像素點給一一印出;
讀取GIF調色盤也類似,把讀到的顏色畫出來,並把他畫成一個一個的方塊,
方塊與方塊間還可以留點空白好辨識;
再來調色盤畫好後還可以去按照顏色的明亮度或RGB值等等去做由小到大或由大到小的排序。

我覺得這次作業跟前面幾次比起來會比較困難些,因為還不熟悉GIF檔的格式,
雖然老師講得還滿清楚的,不過可惜的是老師講解與討論上只有一到二的禮拜,
花的時間也有點少,有點可惜,也讓我有點來不及吸收,
不過在聽老師的講解中其實我覺得GIF檔並不會比BMP來的多複雜,
只要再多花點時間去研究我有把握我能學得很好。

HW6


這次的作業目的是讀取音樂(.wav)檔的內容,內容包括了檔頭、檔案大小、聲道數、每秒取樣數(其實就是頻率)
還有音訊格式。程式的部分首先要開啟音樂檔,用OpenDialog,然後再把資料結構為FILE的指標使用fseek設定一下:

fseek ("FILE變數名稱","位置",SEEK_SET);

設定完後再使用fread去讀取:

fread("變數名稱", 1, "讀幾個位元","FILE變數名稱");

再來印出:

Edit1->Text = AnsiString("變數名稱");

接下來一樣再繼續重新設定指標指到的位置、讀取、印出....
基本上這次的作業我沒遭遇到甚麼大困難,不過在蒐集檔案的相關資料、格式上倒是花了一點時間 ,這還挺重要的,為了要決定指標指到的位置,以及指到後該以何種變數去存放它。
例如檔案大小我用unsigned int去存(其實BYTE也行不過讀到後還要經過公式a[0]+a[1]*256+a[2]*256*256...的轉換)
檔頭的RIFF我就用字串去存,聲道數我用BYTE存。

其實這次的作業還跟之前讀取BMP檔頗類似的,一樣都是讀取檔案內的一些資訊。

2009年11月26日 星期四

HW4




在這次的開BMP圖檔的作業中,是要以C語言中檔案存取的指令(fopen,fread,fseek...)來開啟,
而不是使用c++builder裡所內建的Image1 -> Picture -> LoadFromFile...來開檔。
我們在之前的作業三當中已經利用fopen,fread,fseek指令來讀取圖檔資訊(檔案大小,圖片高寬等等)
若想要將影像秀出螢幕上,我們勢必要先讓fseek指標指到影像原始碼的位置(原始碼的部分可由PSPad這套軟體來檢視),
然後再用fread去讀,我們讀到的東西會先擺入一個陣列中,陣列有3個空間分別來擺放色彩R,G,B值,而這RGB值就可以表示一個像素"點",不過程式只這樣寫還不夠,如此讀到的只有一個像素點而已,因此我們必須要用兩個迴圈來寫,外迴圈是跑圖的高的部分,內迴圈是跑圖的寬的部分,而程式的大鋼就是如此。

在這次的作業中,fopen,fread,fseek這些指令經過前面幾次的練習都熟悉的差不多了,沒有甚麼大困難
,而比較會有問題的地方大概會在讀檔時該用怎樣的讀法?一次讀幾個byte?讀到的東西該暫存到怎樣的資料型態?然後在怎樣丟入image中?丟完後指標該怎麼指?

基本上這些問題排除了,那程式也差不多會寫了,其實程式還滿短的,自己寫完後也覺得不算太難!

2009年11月5日 星期四

HW3

首先先顯示這張bmp檔的內容,再來利用程式把該bmp檔開啟舊檔後,
5個label分別秀出了BM,代表了bmp檔的檔頭字元;
再來是246 35 5 0則代表了該圖檔的大小,不過真正要表示大小還必須經過以下運算:
圖檔大小=246+35*256+5*256*256+0*256*256*256=336886(byte)

換成程式寫法:
FileSize = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;
經過運算後label上的FileSize就正好=336886
接著FileWidth和ilmageHeight分別代表圖檔寬度和高度。

在這次的作業中,其實主要會開檔(fopen),讀檔(fread),秀出BM..來這次作業就沒有甚麼大問題,不管你要秀出BM,檔案大小,寬,高...程式寫法根本沒甚麼兩樣唯一不同的是要設定指標指到的位置(使用fseek),至於要指到哪裡可經由查表得知!




2009年10月21日 星期三

HW2


















這禮拜的作業是將一個24bit的彩色影像轉換成8bit的灰階影像,

作業中當一讀入24bit彩色影像時,程式會先進入switch中選擇影像的格式,

若像影像為24bit時就在Label1上顯示"24位元彩色影像"的字串!

並且在image1(左)上秀出24bit影像,與image2(右)上秀出8bit影像。

而老師有提示過灰階影像=(R+G+B)/3或0.299*R+0.587*G+0.114*B

彩色轉灰階這個部分我覺得還挺有趣的,雖然第一次寫時會有點卡關,

因為要用迴圈來寫,不過寫完後就覺得也還好,概念上不難只是要思考如何用程

式表達出來!

2009年10月6日 星期二

2009hw1




這是我在數位媒體的第一個作業。上圖中X.Y代表滑鼠在圖上的座標位址,R.G.B代表滑鼠目前所指到的顏色,而且點一下還會在Panel1上秀出顏色 !在課堂上寫這個程式時,我發現BCB真的挺方便的,許多物件都幫你寫好了(如Button,label,opendialog等等..)只要在物件上寫幾行程式就能用了,而且還有許多關鍵字也都幫你定義好了,像是Image1->Picture->.......,當然因為這是第一次學的關係,不少關鍵字用法還不大熟悉,剛開始還是免不了要東翻西查,因為工具實在很多。