程式部分:
首先先開啟一張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的系統才可以。
沒有留言:
張貼留言