影像灰度滑移處理的程式接下來我們介紹在 BUILDER C++ 中進行影像灰度滑移處理,進入 BUILDER C++ 後,系統自動建立表單 FORM1,我們只需使用滑鼠在「Standard」 選取一個物件「Button」,抓下來置於表單 FORM1,將名稱(CAPTION)改為 LOAD,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式 void __fastcall TForm1::Button
{ Image1->Picture->LoadFromFile(OpenDialog1->FileName); } 然後回到表單 FORM1,使用滑鼠在「Dialogs」 選取一個物件「OpenDialog」,抓下來置於表單 FORM1,再使用滑鼠在「Additional」 選取一個物件「Image」,也是抓下來置於表單 FORM1,將程式執行(按綠色箭頭按鈕)後,即可執行開檔與展示圖形的動作(圖 1)。我們用滑鼠在抓下來置於表單 FORM1的物件「Image」上面按一下,然後在左邊的 properties 去設定圖形的特性,例如將 AUTOSIZE 改為 TRUE,則圖形將會隨著圖檔的大小而自動變更。 我們希望如果程式執行時,將有一個狀態顯示裝置,因此用滑鼠在「Win95」 選取物件「progressBar」,抓下來置於表單 FORM1,我們希望如果程式執行時,將有一個灰度滑移的控制裝置,因此用滑鼠在「Standard」 選取物件「ScrollBar」,抓下來置於表單 FORM1,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式void __fastcall TForm1::ScrollBar1Change(TObject *Sender){ 底下鍵入 Label1->Caption=(ScrollBar1->Position-50)*4; Label1->Visible=true; Label2->Visible=true; 接下來使用滑鼠在「Standard」 選取物件「Button」,抓下來置於表單 FORM1,將名稱(CAPTION)改為 Slide,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式 void __fastcall TForm1::Button
int x,y; int sa,sb,sc; int sd; sd=4*(ScrollBar1->Position-50); ScrollBar1->Visible=false; Label1->Visible=false; Label2->Visible=false; ProgressBar1->Visible=true; ProgressBar1->Max=Image1->Height; for(y=1;y<=Image1->Height;y++) { for(x=1;x<=Image1->Picture->Width;x++) { TCColor c=Image1->Canvas->Pixels[x][y]; sa=(int)c.Red+sd; if ((int)c.Red+sd >255) sa=255; if ((int)c.Red+sd <0) sa=0; sb=(int)c.Green+sd; if ((int)c.Green+sd >255) sb=255; if ((int)c.Green+sd <0) sb=0; sc=(int)c.Blue+sd; if ( (int)c.Blue +sd >255) sc=255; if ( (int)c.Blue +sd <0) sc=0; Image1->Canvas->Pixels[x][y]=TCColor((unsigned char)sa,(unsigned char)sb,(unsigned char)sc).Color; } ProgressBar1->StepIt(); } ProgressBar1->Position = 0; Button2->Visible=false; ProgressBar1->Visible=false; 使用滑鼠在「Standard」 選取一個物件「Button」,抓下來置於表單 FORM1,將名稱(CAPTION)改為 Ok ,然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式 void __fastcall TForm1::Button
ScrollBar1->Visible=true; Button2->Visible=true;
圖 1 BUILDER C++ 編輯畫面 再到檔頭宣告 #include "tccolor.h",這時整個 Unit1.cpp的內容是這樣的: //--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "tccolor.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { ScrollBar1->Visible=true; Button2->Visible=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { int x,y; int sa,sb,sc; int sd; sd=4*(ScrollBar1->Position-50); ScrollBar1->Visible=false; Label1->Visible=false; Label2->Visible=false; ProgressBar1->Visible=true; ProgressBar1->Max=Image1->Height; for(y=1;y<=Image1->Height;y++) { for(x=1;x<=Image1->Picture->Width;x++) { TCColor c=Image1->Canvas->Pixels[x][y]; sa=(int)c.Red+sd; if ((int)c.Red+sd >255) sa=255; if ((int)c.Red+sd <0) sa=0; sb=(int)c.Green+sd; if ((int)c.Green+sd >255) sb=255; if ((int)c.Green+sd <0) sb=0; sc=(int)c.Blue+sd; if ( (int)c.Blue +sd >255) sc=255; if ( (int)c.Blue +sd <0) sc=0; Image1->Canvas->Pixels[x][y]=TCColor((unsigned char)sa,(unsigned char)sb,(unsigned char)sc).Color; } ProgressBar1->StepIt(); } ProgressBar1->Position = 0; Button2->Visible=false; ProgressBar1->Visible=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::ScrollBar1Change(TObject *Sender) { Label1->Caption=(ScrollBar1->Position-50)*4; Label1->Visible=true; Label2->Visible=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(OpenDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenDialog1->FileName); } } 我們只要將程式加以組譯執行,就可以看到畫面如圖 2 所示:
圖 2 程式組譯執行之畫面 這時候如果用滑鼠在SCROLLBAR上移動,就能觀察滑移灰階值變化,如果滑移灰階值為負,用滑鼠按下OK 的按鈕,就可以看到影像滑移變暗(圖 3)。
圖 3 執行之畫面(變暗) 這時候如果用滑鼠在SCROLLBAR將滑移灰階值變大,再用滑鼠按下OK 的按鈕,就可以看到影像滑移變亮(圖 4)。
圖 4 滑移灰階值為正時之執行畫面 原程式碼及其說明,讀者可自行下載研究,,別忘了將檔案屬性改為可讀寫,再使用 C++BUILDER 來開啟子目錄的 PROJECT1.MAK 檔案,您可以將其重新編譯,以求進一步利用,測試用影像檔案檔名為bluesky.bmp。 |