2010年1月15日 星期五

數媒HW4

這次作業是也是讀取讀片。可是跟第三次不太一樣的是,我們這次是用一個一個畫素點讀取在重新輸出的方式顯示。意思就是我們會從圖片檔的最左上方的畫素點開始讀取,讀一個就輸出一個。

HW4-1→像是這樣

這次也會用到上一次的那三個指令
一樣先用fopen開啟檔案,再用fseek移動游標,最後使用fread讀取
因為是一個一個讀。所以需要用迴圈的方式寫。如下

for(i=0;i
{
fseek (imBMP,offset,SEEK_SET);
fread (bSize, 1, 3, imBMP);
offset+=3;
Image1->Canvas->Pixels[i][j]=(TColor)RGB(bSize[2],bSize[1],bSize[0]);
}</IIMAGEWIDTH;I++)>

HW4-2 顯示結果上跟第三次作業大同小異,畢竟只是改了內部的讀取方式。我們需要的顯示結果還是一樣的。
                                                            10/01/16    白

數媒HW5

這次的作業是將老師的金龜子.gif圖的調色盤讀取出來再進行顏色排列。老師上課有講過,GIF檔的特色就是將一張圖片所需要用到的顏色直接編成一個調色盤。你用256色的就會有256個顏色,128的就是128,24bits的就是有24bits那麼多的顏色。調色盤決定後,圖片所有的顏色都會從調色盤取出。這樣的優點是可以縮減檔案大小,因為這樣就不用去記憶每個畫素點的顏色值了。但缺點是在顏色的顯示上會失真,不適用顏色太多的圖片。
GametisForticula

看~就是那張圖!!(遙指)

基本上只要你不是色盲應該都可以很清楚的看到這張圖主要是由深綠色所組成的。他的其他部位則是有點帶點土黃色暗褐色的感覺。還有陰影部分就是黑灰白三色去配合出來的。
所以由程式解析他的調色盤就是以下這結果↘

 

HW5-2

最後再由明暗度排列會變成這樣

HW5-3

排列過後,較深較暗的顏色都在左上方。依序排列最右下方的就是最亮的白色了。

                                                10/01/16  白

數媒HW7

寫個程式處理音訊,能夠合成歌曲。而且還要做到音樂漸進效果。哇!!光想到就頭大。所以現在的我而言殺了我我也不見得寫得出來...但作業又不能不交。看到同學們都寫出了可以顯示音樂波型的小程式,因此就急忙向同學討教這玩意兒怎麼寫出來的。顯示音訊波型,在各個音訊編輯器中是基礎中的基礎,連播放器有些都會附加這功能了。可是那麼基礎的東西寫起來也沒有那麼容易的說。

HW7-1

執行結果如上

如果我們改變他們的X比例,數字越大會被壓得越密集。

HW7-2

當然Y的部分也一樣。

HW7-3

                                                                            10/01/16  白

數媒HW6

這次是做的不再是圖片檔,而是WAV的開讀檔。基本上開讀檔的步驟跟GIF一樣。不過由於開啟的檔案類型不同,所以重點還是要知道WAV的檔案內容結構。關於內容結構的部分,我有看過蔡宗甫的一張圖 。蔡宗甫的作業上有我就不多貼了。結構裡頭詳細敘述了WAV的資料內容,如聲道數、取樣率、資料量、檔案大小之類的資訊。得知結構之後我們就可以開檔讀取出來了。

HW6-1 HW6-2 HW6-3

我在Windos的內容中只找到了檔名以及大小的內容,其他細部內容似乎並不會顯示的樣子。

                                                                                   10/01/16  白

數媒HW3

這次作業的主題是有關 fopen,,fseek,fread 這幾項指令
首先是我的程式結果

HW3-1

由於我的程式是照著同學的教學一步一步做出來的
所以其實對於指令的作用在幹嘛不是非常清楚…
為此我特別上網研究了一下這三個指令

---------------- 分隔線 ----------------

fopen:
開啟檔案或者 URL。
語法:
int fopen(string filename, string mode);
傳回值: 整數
函式種類: 檔案存取

這個指令主要是是用來開啟檔案用,也可以用來開啟網頁。它是將內部游標移動到欲開啟的檔案處做開啟的。由他的指令語法我們可以知道,藉由輸入正確的檔案名稱即可開檔。後面的mode是所謂的開啟模式,輸入不同的代號有不同的開啟方式。

  • 'r' 開檔方式為唯讀,檔案指標指到開始處。
  • 'r+' 開檔方式為可讀寫,檔案指標指到開始處。
  • 'w' 開檔方式為寫入,檔案指標指到開始處,並將原檔的長度設為 0。若檔案不存在,則建立新檔。
  • 'w+' 開檔方式為可讀寫,檔案指標指到開始處,並將原檔的長度設為 0。若檔案不存在,則建立新檔。
  • 'a' 開檔方式為寫入,檔案指標指到檔案最後。若檔案不存在,則建立新檔。
  • 'a+' 開檔方式為可讀寫,檔案指標指到檔案最後。若檔案不存在,則建立新檔。
  • 'b' 若作業系統的文字及二進位檔不同,則可以用此參數,UNIX 系統不需要使用本參數。

fseek:
移動檔案指標。
語法:
int fseek(int fp, int offset);
傳回值: 整數
函式種類: 檔案存取

這個指令是移動內部檔案的游標,藉由移動游標改變讀取位置。但如果由fopen開啟網址類的檔案,此指令不能用。

fread:
元組的方式讀取檔案。
語法:
string fread(int fp, int length);
傳回值: 字串
函式種類: 檔案存取

此指令輸入後可以讀指定長度的位元組或直接讀到檔案結尾。

---------------- 分隔線 ----------------

這三個指令其實就大概是這樣。不過,這類型的指令不只這三個。還有flock(鎖住檔案)、fpassthru(輸出所有剩餘資料)、fputs(寫到檔案指標)、fwrite(二進位位元方式寫入檔案)...等等。似乎這類型 f 開頭的指令都是在進行檔案的存取,不論讀取或輸出。

                                     10/01/16   白