這是我目前花最久的作業了,之前的作業都是有關於BMP圖檔的讀取,這次的作業換成了讀取GIF的圖檔,照慣例先從wiki中吸收有關於GIF圖檔的資訊,GIF主要分為兩個版本,即GIF 87a和GIF 89a,這不像其它死板板的圖片,是可以支援動畫的形式。
接著利用老師的範例程式,先補上老師範例程式該有的標籤,每個對應顯示出來的是GIF的檔頭資料,這是在wiki上查到的檔頭資料:
接著還要定義結構來存放檔頭的資料,例如這樣
typedef struct {
char cVersion[6];
Byte bScreenWidth[2];
還有一些<<和>>的,例如這個 bM = GIFHeader[0].bMCrPixel >> 7; 搞不太懂耶,希望老師能解釋囉。
最後是使用 crSortedPalette[k].bRed+crSortedPalette[k].bGreen+crSortedPalette[k].bBlue)/3
來比較大小。
順利做出來後,發現出來的結果跟老師放在網頁的圖片不一樣,後來詢問過同學後,將我原本的RGB順序改成 現在的BGR就會有跟老師一樣的結果了。
imPalette->Canvas->Brush->Color =(TColor)RGB(crPalette[k].bBlue,crPalette[k].bGreen,crPalette[k].bRed);
這是之前的結果:大功告成~~之後就是我的完成品:
我的排序是從亮到暗
不過我發現有一個點顯示不太一樣,有一個特別的點,是紅色的,你們有發現嗎?
不知道為什麼會這樣耶。
開其它圖片來玩玩~~
沒有留言:
張貼留言