我平常都是有跟著老師的進度在做,所以覺得還不會很難。只要照著老師給的一些程式碼,知道那程式碼是在做什麼事情的話,稍微改一下就可以輸出灰階的圖片了。不過當然得要先知道彩色轉灰階的運算方式,老師教我們的是用R、G、B三個數值加起來,然後除以三,把得到的值放回原本的R、G、B裡,這樣輸出以後就會變成一張灰階的圖片了。
這個是我做的程式畫面,這一部分應該沒有什麼好說明的,就是一些BCB的元件用滑鼠拉一拉而已。我是將原本的圖片放在左邊的框框裡面,然後在將處理過後的圖片放在右邊的框框裡。我想每個人設計的應該都大同小異吧,畢竟都是看著老師做的......
這個是將圖片讀取進來後,我把它顯示在左邊的框框裡。下面那一條是讀取圖片時,會顯示進度的進度條。這邊的程式碼比較長,而且大概都跟老師用的一樣,所以我就不打出來了。
這是在按下"互補色"按鈕之後,會將處理後的畫面顯示在右邊的框框裡。
下面是我互補色按鈕裡面的程式碼:
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
最後附上一個我程式碼的圖,只是一小部分而已啦~我會在程式碼上面打上一些註解,不然真怕過一個星期之後就忘記那到底是在做什麼了。
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//輸出互補色的圖片的按鈕函數
//進度條
ProgressBar1->Position=0;
ProgressBar1->Max=ImageHeight;
//計算每一個點的互補色迴圈
for (i=0;i<imageheight;i++)
{
ProgressBar1->StepIt(); //進度條增加
for (j=0;j<imagewidth;j++)
//將互補色圖片輸出在Image2
Image2->Canvas->Pixels[j][i] = (TColor)RGB(255-RMatrix[i][j],255-GMatrix[i] [j],255- BMatrix[i][j]);
}
}
這個則是在按下"轉灰階"按鈕後,將輸出的灰階圖片放在右邊的框框裡。
下面是我轉灰階按鈕裡面的程式碼:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//轉灰階的按鈕函數
int gray;
//進度條
ProgressBar1->Position=0;
ProgressBar1->Max=ImageHeight;
//將每一個點轉換成灰階的迴圈
for (i=0;i<imageheight;i++)>
{
ProgressBar1->StepIt(); //進度條增加
for (j=0;j<imagewidth;j++)
{
//將RGB的值加起來除以3,放在gray變數裡
gray = (RMatrix[i][j]+GMatrix[i][j]+BMatrix[i][j])/3;
//將灰階圖片輸出在Image2
Image2->Canvas->Pixels[j][i] = (TColor)RGB(gray,gray,gray);
}
}
}
這是按下"隱藏原始圖片"按鈕時,左邊顯示原始的框框就會消失了,當在按下一次時就會又跑出來了。其實這個只是老師在上課時有提到這個元件的屬性,我就無聊試一試,然後覺得蠻有趣的,所以就把它做成按鈕放上來了...... 這個按鈕比較簡單,我也放一下程式碼好了:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//隱藏原始圖片的函數(純屬功能測試...)
if( sw==0 )
{
ScrollBox1->Visible=false;
sw=1;
}
else
{
ScrollBox1->Visible=true;
sw=0;
}
}
if( sw==0 )
{
ScrollBox1->Visible=false;
sw=1;
}
else
{
ScrollBox1->Visible=true;
sw=0;
}
}
最後附上一個我程式碼的圖,只是一小部分而已啦~我會在程式碼上面打上一些註解,不然真怕過一個星期之後就忘記那到底是在做什麼了。
最後是我做這個程式目前所碰到的問題:
1.就是有些程式碼太長了,我想換行繼續打,那個要怎麼用啊=.=?
2.在開啟一張圖片的時候,如果按了取消就會出現錯誤。我知道為什麼會發生那個錯誤,因為我們的程式裡面,都是假設有選一張圖片開起來,但是卻沒有處理如果按取消會怎麼執行,所以就有錯誤產生了。雖然知道了,但是我卻不知道要怎麼讓程式判斷,當按了取消後要執行什麼耶。
3.開啟JPG圖檔時雖然會正常的顯示在BCB的程式上,但是卻會跳出有錯誤訊息,並且無法執行BMP的影像處理。
4.有一些程式它會設定,在未執行某個步驟時,有一些按鈕是無法按下去的。我想問一下再BCB裡面,如果我想讓它在未開啟一張影像前,下面的按鈕都先不能按,那這樣要怎麼設定呀?
5.要怎麼將處理過後的影像另存新檔呢?總不能都只是在軟體裡面按按好玩的而已吧=.=
沒有留言:
張貼留言