2009年10月22日 星期四

HW2

本週作業:
讀入一個 24-bit 彩色 .bmp 影像
並將其轉換成 8-bit 灰階影像儲存!


基本上沒太大的問題
要轉換成灰階的做法,課堂上提示的 (R + G + B) / 3便能搞定

但是仔細想想題目,8-bit 灰階影像,又會有點疑問
8 bit = 256色,儼然算是彩色的影像
但又為何會跟灰階影像扯上邊呢?

存在著這疑問同時,上網想找其他轉「8bit灰階」的做法時
碰巧查詢到直接指定PixelFormat=pf8bit,但是這樣的效果為











得知的確8 bit是能夠呈現不精緻的彩色影像
所以為何不是用2 bit灰階、4 bit 灰階,而是選用 8 bit 灰階呢?
是因為24 bit的 R + G + B 除以三就是等於 8 bit嗎?
寫完程式才又突然想到..
2 bist有4種顏色,無法構成彩色圖像
4 bits有16種顏色,就算能構成彩色圖像也很難看
而8 bits可以儲存256種顏色,色彩值雖多但無法達到精細

那反過來..如果不是存彩色,而是存灰階色彩
反而可以構成非常精細的灰階圖像呀~


以下配合截圖說明程式

1.啟動畫面













程式畫面由
MainMenu(Open、Save、Exit)、
GroupBox、
Image方框、
ScrollBox、顯
示圖片位元的Label、
轉換的Button、
Reset Button、
進度條
其中MainMenu的Save、Transform Button為不可使用;
Reset Button、進度條為隱藏


2.開啟Bmp圖檔














3.載入圖片













Load 影像至Image1、偵測影像的位元值、Transform Button設定為可使用



4-1. 開始轉換












顯示出轉換進度(一開始適用來Debug),Transform Button設定為不可使用


4-2.轉換中












加了一行Application->ProcessMessages();
讓程式不會有不回應的狀況,畫面從左而右依序轉出


5.轉換完成













轉換完成彈出Messeage視窗提示


6.Save影像













在Messeage視窗按下確定後,進度條恢復隱藏、Save為可使用、Reset Button顯示

此時若選擇Open載入影像,則會回到第三張截圖的狀態 (包含Save Disable、Display Transform Button、Image2 Clean)


7. 儲存的灰階圖檔











選擇Save後,會產生出一個Gray.bmp的灰階影像




另外以這張貓咪的Image為例,實際影像大小為480 x 360
而載入Image1的方框時,設定縮放80%(384 x 288)
在轉換時則須依照原影像大小操作
因此在轉換的過程中,灰階圖片會比原圖片來的大
若鎖定Image2方框大小(AutoSize為false),轉換後的影像會被裁切;
若設定AutoSize為True,轉換過程Image2的方框會擴大
因此拉了一個ScrollBox來放Image2,順利解決這個問題
但還是想要嘗試看看在轉換的過程中,能否直接同步顯示出縮放的影像,
而不用等到轉換完成後再縮放,不知道能用什麼方法達成?

沒有留言:

張貼留言