2010年1月16日 星期六

HW5

其實這個作業很早就在做了,只是一直都有一些bug在,所以才拖到這個時候

1

Program Name:SourceGIF V2
Version:   0.01 alpha
               0.02 alpha
               0.01 beta

功能:
0.01 alpha 讀取GIF的基本Header
0.02 aplha 嘗試讀取調色盤
0.01 beta  結合0.01與0.02的重製版,並加入排序功能

2
按下Sort就能進行排序

這個作業期時花了我不少時間
好不容易上個BMP搞懂了,這次換一個新的,又加上關於GIF的中文資料很少,只能翻閱英文資料。雖然說我的英文普普,但要再重新去了解與翻閱新的資料與名詞花了我不少時間。

之前第一次上GIF時,老師帶我們一起看wiki的資料,有了實做BMP讀檔的經驗,看完資料後馬上開始動手做

做到一半時突然有個問題
Header資料中的GCT是什麼東西?
那堂課就問老師這個問題
其實這東西是表示三個項目(M CR Pixel)
M表示接下來的GIF調色盤是否為獨立還是分開的(動畫時會出現)
CR表示調色盤的色彩解析度為多少?
Pixel則表示色彩的寬度為何?

那要如何取出? 只有一個Byte在儲存啊?
在老師的範例中
有一段程式碼有出現>>或是<<
這個代表向左或是又"平移"多少
以GCT這個來說,如果是全彩的話
這個位置通常會儲存F7
換算成二進位就變成 "11110111"

首先是M的部分
>>7代表的是向右移7格位置就變成00000001也就是1

CR的部分
<<1代表向左移動1個位置
>>5再向右移動5個位置
變成是00000111

最後是Pixel的部分
<<5向左移動5個位置
>>5向右移動5個位置
一樣變成是00000111

換句話說
這一個Byte裡面他表示了三個資訊
GCT
所以我們要用>>或是<<的方式取出它的值
有人可能會問說為什麼要這麼麻煩呢?
別忘了GIF是個用來壓縮全彩影像的的格式
如果說把這三個值分別儲存
變成會占用3個Byte
這樣就失去壓縮的意義了
既然1個Byte就可以會什麼不存得更小一點呢?

沒有留言:

張貼留言