
這個是我目前BCB程式寫出來的介面,感覺非常的......單調。大概說明一下功能,左邊的框框是要放讀取進來的圖片,而右邊的框框則是放處理過後的圖片。下面的按鈕就是不同的影像處理功能,按下去就會將圖片做處理,然後顯示在右邊的框框。在最下方有一個進度條,在做影像處理時,進度條可以讓使用者知道目前程式的處理進度。在進度條的左上方,我有用一個Label來顯示目前圖片的路徑。

先來介紹第一個按鈕的功能,就是老師在上課時教過的互補色啦!在將圖片開起之後,就可以點下面的按鈕了,上面那張圖是按下互補色之後的結果。用255分別減掉目前R、G、B的值,算出來後的結果顯示出來就是互補色啦~

接下來下面的按鈕就是將彩色圖片轉成灰階圖片,這個老師在上課時也有教過囉,上面那張圖就是按下去之後顯示的結果。大概的概念就是將R、G、B的值加起來,然後除以3,再將結果放回原本的R、G、B陣列裡面,輸出之後的圖片就變成灰階的圖片了。


再來以下的按鈕功能老師就沒有教過了,上面那個圖片是按下左右翻轉後,圖片會左右交換過來。看上面的貼圖就可以看出來了,翻轉後原始圖片和新圖片是左右對稱的。

在左右翻轉之後,我又想到可以用類似的方法做出上下翻轉的效果。上面那張圖片就是按下上下翻轉之後的結果。其實這2種功能都只是在For迴圈裡面改一下東西而已,並沒有甚麼特別的演算法。


最後一個按鈕的功能是把圖片變得亮一點,從上面的圖面可以看出,好像變得有點白白的。我的做法是將RGB的值分別加上50,然後顯示出來,所以圖片看起來應該就會變得比較偏亮一些。當然有增亮就會有讓圖片變暗一些的功能了,不過目前那個按鈕還沒有實作出來,所以就沒有貼圖了。
大家可能會在上面的按鈕中看到一個"馬賽克",那個按鈕目前的功能也還沒有實裝,我還在想要怎麼讓它輸出時會變的有馬賽克的效果,期末時應該也是做得出來的。
目前的進度大概就是這些功能,接下來除了還要繼續再增加新的按鈕功能之外,我也在想到底要怎麼做版面的設計,因為按鈕快要不夠放了...... 不過我目前還沒有頭緒,不知道最後會做成什麼樣子。
接下來要說的就是我目前所碰到的問題,其實這個程式有非常多的Bug,用一用很容易就當掉了,有很多的限制都沒有設定好,所以常常會有錯誤發生。最直接發生的問題就是,當在按下開啟圖片時,會出現資料夾的視窗讓使用者選擇要開啟的圖片,但是當這個時候按下取消時,鄭個程式就會發生錯誤了。
我先列出一些目前有想到的問題,其實問題還真的多到記不起來= =
問題:
1.程式碼太長如何換行?
2.若是開啟圖片時按取消會發生錯誤 (12/18已解決)
3.開啟JPG圖檔無法進行影像處理(BMP才行)
4.如何再開啟圖片前,設定按鈕為無法點選的狀態? (12/18已解決)
5.如何將處理過後的圖片儲存? (12/18已解決)
6.圖片路徑不能為中文名稱
7.當浮水印圖片大小大於原本圖片時,會發生嚴重錯誤
8.太多了,還沒想出來......
進度報告就先到這邊吧!未來只剩下2個星期的時間,有的課又要做報告,又要準備期末考的,不知道有沒有時間來把BCB程式趕完呢......
關於問題2~
回覆刪除在開啟圖片的檔頭那~
加入這行...
就OK了~
if (! OpenPictureDialog1->FileName.IsEmpty())
關於問題 3 :
回覆刪除http://leebcb.blogspot.com/2006/09/jpeg.html
關於問題 4:
回覆刪除Button元件有一個 Enabled 的 Property, 在圖片開啟前, 請用指令設定為 false,
Button1->Enabled = false;
在圖片開啟後, 請設定為 true,
Button1->Enabled = true;
關於問題 5 :
回覆刪除請先拉一個 SavePictureDialog元件進來, 然後使用下列指令即可將 Image1 儲存成 BMP 檔。
Image1->Picture->SaveToFile(SavePictureDialog1->FileName);
目前問題2、4、5都已經解決了~
回覆刪除但是關於問題3,目前的情況是可以開啟JPG的圖檔並顯示在程式上面,但是無法將RGB的值抓出來放進陣列裡,當程式執行到將RGB值上入陣列的指令時,他就會出現錯誤了。
我想這應該是JPB檔案格式和BMP不同的關係吧!
所以不能用BMP圖檔的處理方式來用在JPG檔案上。
謝謝你們的回答囉~
繼續來更新我的程式......