2009年10月9日 星期五













這是我第一次修有關於用到bcb的一門課!!!

因為還不是很熟悉bcb,所以一開始在做作業的時候一直寫不出來...
後來還好有同學相助,我開始懂得一點bcb的操作。
能選到這門課很開心,希望以後可以在這門課學到更多東西!!!

HW01


經過這幾次課堂的洗禮,對影像處理領域也有了比較多的認識,
也透過作業獲得蠻多的樂趣與成就感,儘管是與別人一起討論出來的結果,
但是可以將作業完整呈上還是感到很開心。

2009年10月8日 星期四

感恩

提醒一下還未交書錢的同學.明天上課請攜帶740
因為從第一批訂的書到現在快一個月了. 統一收齊要匯款了
請尚未繳交的同學幫個忙!
明天我會留在學校.如果早上不方便的請來跟我打聲招呼.下午收也可
不過不要脫過明天~感恩

收完再刪文~


2009年10月6日 星期二

HW01


這學期 可以搶到影像處理 真的好幸運呢~^^
一開始的作業 使用的是 之前資料結構跟演算法用過的 BCB
所以 很多物件 和 程式打法 都很熟悉~
不過 學習有關影像處理~ 是第一次呢~
希望可以跟老師學習到 很多不一樣的程式
讓自己可以充時一點~
先謝謝老師囉~
這次作業真的讓我絞盡腦汁呢~
呵呵~~^^
不過寫出來了!!!好有成就感耶!!!!
YA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
之後我會繼續加油喔!!!

HW1

用BCB將圖作RGB值統計所需的物件有:

Standard Group -> Mainmenu
Standard Group -> Pennel

※此物件可將被拉進的物件變成一個群組。

再來就是最重要的
Dialogs Group -> OpenpictureDialog
這是關於開啟圖片的物件



再來是語法的部分:

這兩行是用來開圖片的程式碼,可以將圖片從檔案讀進Image1

OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

再來是抓取Image1的高與寬的語法。
底下分別是抓取他的高以及抓取他的寬。

iImageHeight=Image1->Picture->Height;
iImageWidth=Image1->Picture->Width;


接下來我們就是要利用抓取的寬與高,設置兩個For迴圈去將圖片每個像素的儲存格跑過一次


接下來就是利用抓取色彩值得函式庫去抓取每個像素的色彩值


ucMatrixG[i][j]=GetGValue(Image1->Canvas->Pixels[j][i]);
ucMatrixB[i][j]=GetBValue(Image1->Canvas->Pixels[j][i]);
ucMatrixB[i][j]=GetBValue(Image1->Canvas->Pixels[j][i]);


GetRValue,GetGValue,GetBValue分別是對像素抓取紅色、綠色、藍色的色彩值得函式庫。
去取得每個像素的色彩值時,存到ucMatrixR,ucMatrixG,ucMatrixB裡頭。

之後再利用指標去讀ucMatrixR,ucMatrixG,ucMatrixB裡頭的值,再用以下語法輸出RGB值


Edit1->Text=**ucMatrixR;
Edit2->Text=**ucMatrixG;
Edit3->Text=**ucMatrixB;

就可以大功告成囉!




以下是實作圖片。













HW1



這次我第一次用BCB 完成作業

除了上課 主要還是請教同學

完成後很有成就感

雖然只有完成開啟圖片 這項功能

還有很多很多沒有學到的

希望在這堂課 可以學到更多相關的

-------------------------------------------------------

以上是我第一次打的

下面是我後來修改的(為了分數...很現實= =)

第一個作業老師部落格上就有重點

在Lee's C++ Builder Programming Notes 裡面image

就有寫到重點

這兩行是把圖片讀進myImage1(開啟 BMP 影像)

OpenPictureDialog1->Execute() ;

myImage1->Picture->LoadFromFile(OpenPictureDialog1->FileName)

利用宣告三個二維陣列 , 並用new配置記憶體空間 (動態宣告二維陣列)

ucRMatrix = new unsigned char *[iImageHeight];

ucGMatrix = new unsigned char *[iImageHeight];

ucBMatrix = new unsigned char *[iImageHeight];

for (int j=0;j

{

ucRMatrix[j] = new unsigned char [iImageWidth];

ucGMatrix[j] = new unsigned char [iImageWidth];

ucBMatrix[j] = new unsigned char [iImageWidth]; }

這是例外處理 跳出

catch (std::bad_alloc)

{

ShowMessage("Could not allocate memory...Bye");

exit(-1);

}

這是用GetRValue和for迴圈抓取圖片的Pixels值取得RGB值分別存入二維陣列

ucRMatrix[x][y] = GetRValue(myImage1->Canvas->Pixels[x][y]);

ucGMatrix[x][y] = GetGValue(myImage1->Canvas->Pixels[x][y]);

ucBMatrix[x][y] = GetBValue(myImage1->Canvas->Pixels[x][y]); }

這個作業直接依靠老師的部落格就能動手完成

也是第一個作業 , 即使不熟bcb的同學 , 參考老師部落格就可以清楚

知道每個細節 , 這項作業是後面作業很重要的基礎 , 所以雖然之前寫

大概知道怎擺怎放 , 後來再打心得 , 才發現原來只是這樣 , 跟以前學的

c/c++觀念上根本完全相同 , 呈現方式不同罷了 , 我想這是我之後在寫心

得所發現的

-----------------------------1/19 (補)

老實說我一年級是學C語言 之後 是學java

與c++很不相同. 所以學起來很辛苦

c++是物件導向語言 , 多了可以建立實體物件的

資料結構也是學java的 那時候是 用類別class 裡面宣告

屬性 , 在主程式new實體物件 , 在用點(.) 例如:area.watch( int b)

來給初值或其他

c++ 是用箭頭(->) 所以一開始看到的時候 都霧煞煞

不過觀念都一樣 , 所以也沒有卡很久

用bcb之後 , 第一次用視窗化程式設計 來寫 , 不像以前都是開空白

#include ... 開始寫

第一次修老師的課 , 學到很多 , 不過自己"一開始"沒有花心思在上面

之後才再補齊課程內容 , 真的是很慚愧 ..

另外一提:try- catch 我從沒用過得說

例外我都是用if-else 如果要我憑空寫 我想我的程式碼應該一大串吧..

還好有老師的部落格範例..XD

2009年10月2日 星期五

hw1





































一開始在動態宣告記憶體的地方有點困惑.不過後來老師提醒一下就可以繼續了

程式碼部分.首先讀圖指令:

OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

然後取得該張圖片的長寬
可用以下2行指令
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap);

iImageHeight= Bmp->Height;
iImageWidth = Bmp->Width;

確切的意思我沒有很懂.大概式宣告一個圖形變數.把它和image1結合在一起


然後在宣告陣列.因為一個pixel有三元素RGB.所以各宣告一個陣列.所以總共是3個

 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);
  }


再來就是用for迴圈來儲存每個pexel的每個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]);
    }

顯示的部分:
if (Image1->Picture->Bitmap->Empty!=true) //因為如果還沒有讀到圖.滑鼠就到image的範
 {                   //圍會出錯.拿這if 來做預防
  Form1->Label1->Caption=AnsiString(ucMR[X][Y]);//X,Y為滑鼠移動在image上的位置
  Form1->Label2->Caption=AnsiString(ucMG[X][Y]);
  Form1->Label3->Caption=AnsiString(ucMB[X][Y]);
 }

心得:
因為之前有修過相關,所以在寫作上比較能容易上手.參考了不少別人寫的程式.看到不同的寫法.多少有些收穫.像是取得圖像的長寬便是從別的程式擷取過來的.基本上是以老師的東西做基礎.剪剪貼貼.不過有玩成一件事總事值得開心的~

HW01

雖然不能算是第一次碰bcb,
可是對bcb程式依舊不大熟悉....
摸索之後才有這簡單的成果出來,
程式說真的也只是拼拼湊湊,
跟向高手請教出來的,
一開始真的很怕run錯,
因為用某張圖片出來的數字很奇怪,
不過好險跟別人出來的程式一起run,
結果沒有改變,
才放鬆了一口氣,
等拿到書後,應該能夠更加了解:)

HW01


上學期有修了一學期的視訊遊戲製作,就是使用BCB來撰寫,覺得使用BCB來寫程式非常的有趣,因為是視窗化的關係,有很多元件可以使用,使用起來非常的方便


HW01

這次的作業中開起圖檔的部分之前有學過,所以沒什麼問題.
比較有問題的是二維陣列的部分,我是在看到某位學長的作業講解之後才比較了解二維陣列怎麼弄.
圖片中不難發現我顯示出很多數值,那是因為我看其他同學的作業中有的是顯示某個點的RGB值,有的是顯示出每個點RGB值的總和,所以我兩個都做