2009年10月2日 星期五

hw1













程式部分:

首先先開啟一張bmp圖片
OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

再來我要取得圖片寬高
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap);
iImageHeight= Bmp->Height;
iImageWidth = Bmp->Width;

宣告三個二維動態陣列
try
  {
   ucMR = new unsigned char *[iImageHeight];
   for (j=0;jucMR[j] = new unsigned char [iImageWidth];
  }
 catch (std::bad_alloc)
  {
    ShowMessage("Could not allocate memory...Bye");
    exit(-1);
  }

取得圖片RGB值分別存入陣列
for(i=0;iHeight;i++)
  for(j=0;jWidth;j++)
    {
     ucMR[i][j] =GetRValue(Image1->Canvas->Pixels[i][j]);
    ucMG[i][j] =GetGValue(Image1->Canvas->Pixels[i][j]);
     ucMB[i][j] =GetBValue(Image1->Canvas->Pixels[i][j]);
    }

顯示RGB值輸出

if (Image1->Picture->Bitmap->Empty!=true)
 {                   
  Form1->Label1->Caption=AnsiString(ucMR[X][Y]);
  Form1->Label2->Caption=AnsiString(ucMG[X][Y]);
  Form1->Label3->Caption=AnsiString(ucMB[X][Y]);
 }

心得:

自己視窗化是用MFC,所以對BCB的用法不是很清楚,

但是在詢問過同學一些相關的語法之後,然後慢慢的熟悉系統,

覺得BCB比起MFC簡單很多。因為比起MFC需要拉起鏈結,

將有相關的部分連結起來才會驅動,而BCB只需要在要啟動的地方,

將程式碼打入,然後將要輸出的地方的名稱打入,

只是相關的語法需要特別的去查詢,但是比較起來,

整個介面就相對的陽春許多,比較起來會覺得BCB是給初學者使用的,

而MFC而是高手的進階版本。所以使用起BCB來對我來說是比較簡單的。

在整個程式的部分,需要先拉出開啟圖片的小方塊,

然後再拉出一個scroll box,並且在裡面放置一個picture的框架,

再拉出3個用來輸出R.G.B的框架,最後在設定一個按鈕,

並且在按鈕的地方雙擊兩下,程式就會自動建立好鏈結,

只要在裡面將前面所講到的程式碼放進去,

並且將輸出的檔案名稱以及R.G.B的框架對好,程式就算大公告成。

完成後將程式compile,點擊剛剛所設定好的按鈕,

並且選取需要讀取的圖片(p.s 圖片只能讀取bmp檔案),

最後總算能夠總算能夠把圖片讀出來了,目前還是需要摸熟BCB的系統才可以。

沒有留言:

張貼留言