AOI產業設備系統設計人才培育計畫夥伴學校

影像灰度滑移處理的程式

回上頁

接下來我們介紹在 BUILDER C++ 中進行影像灰度滑移處理,進入 BUILDER C++ 後,系統自動建立表單 FORM1,我們只需使用滑鼠在「Standard」 選取一個物件「Button抓下來置於表單 FORM1,將名稱(CAPTION)改為 LOAD然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式  void __fastcall TForm1::Button 1Click(TObject *Sender) { 底下鍵入:if(OpenDialog1->Execute())

       {

      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 2Click(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;

使用滑鼠在「Standard」 選取一個物件「Button抓下來置於表單 FORM1,將名稱(CAPTION)改為 Ok 然後用滑鼠在上面按兩下,進入 Unit1.cpp,在函式  void __fastcall TForm1::Button 3Click(TObject *Sender) { 底下鍵入

ScrollBar1->Visible=true;

Button2->Visible=true;

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 所示:

程式組譯執行之畫面

這時候如果用滑鼠在SCROLLBAR上移動,就能觀察滑移灰階值變化,如果滑移灰階值為負,用滑鼠按下OK 的按鈕,就可以看到影像滑移變暗(圖 3)。

執行之畫面(變暗)

這時候如果用滑鼠在SCROLLBAR將滑移灰階值變大,再用滑鼠按下OK 的按鈕,就可以看到影像滑移變亮(圖 4)。

滑移灰階值為正時之執行畫面

原程式碼及其說明,讀者可自行下載研究,別忘了將檔案屬性改為可讀寫,再使用 C++BUILDER 來開啟子目錄的 PROJECT1.MAK 檔案,您可以將其重新編譯,以求進一步利用,測試用影像檔案檔名為bluesky.bmp

回上頁