2009年10月26日 星期一

HW2

時間又超過啦…

上課所講的方法其實並沒有很懂…

所以作業上網做了很多功課,也用了老師講的C++Builder6書籍來參考。

課程部分重點在於影像旋轉,下面是我遇到的問題

一開始動手完成最初版本是會消除到邊邊角角,
後來發現原來是中心點的問題(參考右圖)

但是我對部落格上的程式講解沒辦法有效的轉成我想要的程式碼,所以我就另外找了程式組合起來。

再來就是數學運算的部分,剛完成的時候我在變數設置的時候就把角度的部分寫死。

後來由於我想要可以自己輸入角度,所以就把角度換弧度的地方做更動變成(2*3.1416*angle)/360,如此就可以自訂angle

因為Edit1內的Text內容是Ansistring型態,我以為做(int)這樣簡單的強制轉換就可以改變…沒想到不行,而是必須使用.ToInt(),在BCB中應該很多物件內容屬於Ansistring,不過轉換方法很容易找到,沒有花到太多時間。

原本想直接釋放記憶體就可以再做一次旋轉,不過釋放記憶體後卻不能再做旋轉(會出錯)
使用Delete,不知道哪邊出了問題,所以現在也只能再重新開才能再次旋轉。

最後一個問題是,目前圖片檔案必須符合Image設定大小或是Image改成跟圖一樣,否則旋轉後會有黑色部分出現或是截到圖。
(Stretch設true沒用,可能是因為只是將圖縮放至預設大小,而旋轉是用Image設定做運算?)
↑問題已解決,將Autosize調整為true,如圖


需要手動…較麻煩,但是可以不限制圖的長寬,也不會有黑色部分出現。


如果有人願意指導一下,或是旋轉有問題可以來信給我(我不一定全盤了解…Sorry)。

下面是旋轉135度和150度的情形。
 

HM2



這是一張逆時針旋轉45度的旋轉圖,雖然是顯示出來了,不過程式碼部分跟能夠旋轉各種角度的還有一大段差距,等整個完成之後再想辦法補上來。

2009年10月24日 星期六

HW2




研究了很久終於做出這個作業出來了,剛開始是因為旋轉後的圖片無法顯示出來,在參考同學的程式之後,終於可以顯示出來。
即使如此,旋轉後的圖片還是有些奇怪。因為我重複做兩次旋轉之後,旋轉之後的圖片會直接覆蓋上去,變成下面這張圖這樣。
我想原因應該是我哪裡沒有設定好吧,所以還需要再努力修改程式。

HW2



老實說這個部份
在旋轉後中心點後
新的矩陣點丟入舊矩陣點
想蠻久的因為不太知道怎麼丟值

後來就再看老師發表的介紹並詢問同學
終於好了

-------------------------------------------
新增部分

老實說這是我最頭痛的一個作業

不知為啥我對三角函數就是很頭痛

在最初,老師還沒放範例程式之時

我程式其實進度微薄

只做出單純套公式做出旋轉

而所謂的圖片破碎與圖片位置沒設好則苦惱無法解決

直到老師放範例程式之後才做出不破碎的圖與算出圖中心的位置

後來同學成凡(Matt)提供我他所找到的教學

(也就是他放在網誌鏈結的那篇)

知道如何把新的圖片大小設好

float minx=min(0,min(Point1x,min(Point2x,Point3x)));
float miny=min(0,min(Point1y,min(Point2y,Point3y)));
float maxx=max(Point1x,max(Point2x,Point3x));
float maxy=max(Point1y,max(Point2y,Point3y));

int DestBitmapWidth=(int)ceil(fabs(maxx)-minx);
int DestBitmapHeight=(int)ceil(fabs(maxy)-miny);

DestBitmap->Height=DestBitmapHeight;
DestBitmap->Width=DestBitmapWidth;

hw2













這次的作業主題我覺得困難的地方在於旋轉的數學公式:
X=X'*cosT-Y'*sinT
Y=X'*sinT+Y'*cosT
再來就是尋找中心點
還有就是BCB的使用方法,真的不好上手,對於不常使用視窗化程式的我, 在物件的地方思考了很久,最後發現只是單單的把值傳送過去而以。經由這次的作業,使我更加熟練程式的寫法。

2009年10月23日 星期五

HW1 - 開啟一張bmp圖片。

(首先,這麼慢才PO文,抱歉,因為研究了很久...囧)

  這次的作業是開啟一張bmp圖片,並且把RGB的值取出存入三個二維動態陣列儲存,且滑鼠在圖片上移動時,可以隨著滑鼠移動顯示圖片該點的RGB值。實作的流程和幾個比較重要的語法如下:

-------------------------------------------------------------
1.開啟一張bmp圖片
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

2.取得圖片寬高
Height = Image1->Picture->Height;
Width = Image1->Picture->Width;

3.宣告三個二維動態陣列
IMatrixR = new unsigned char *[Height];

4.取得圖片RGB值分別存入陣列
IMatrixR[i][j] = GetRValue(Image1->Canvas->Pixels[j][i]);

5.使用OnMouseMove把滑鼠移動到的點的RGB值輸出
Label4->Caption = AnsiString(GetRValue(Image1->Canvas->Pixels[Y][X]));
-------------------------------------------------------------
實作:
開圖(點圖放大)↓


秀圖(點圖放大)↓


心得:

  一開始因為第一次接觸這個程式語言,光是一些初步的問題,如:怎麼輸出一段文字、要在哪個區塊打程式碼...等,就快把我搞掛了,不過我的個性比較衝動,所以下課鐘響就馬上衝到圖書館借了一本BCB的書,書中提到了簡單的操作,演練之後有了初步瞭解,發現它的邏輯其實與學過的C語言差不多,但它是屬於視窗化的程式設計語言,再加上使用到的函式語法不少,所以不知道的語法就要上網去找一下嚕。

  這次實作大部分是參考老師和學長的程式碼外加書上的範例,卡關最久的地方就是隨滑鼠移動顯示值,這個部份的實作方式就是在顯示圖的物件上點一下再到左邊的小視窗,把標籤切換到"Event"後,有個叫"OnMouseMove"的欄位,在空白欄位上快點兩下,就會在程式碼那看到一個空白的副函式,它的宣告變數中就有X和Y,所以猜想可以利用這兩個變數去控制顯示滑鼠目前所在的位置的值,結果答對了~哈哈。

HW1

這是HW1的作業,作業還是要實際操作過,所以就先補上了。

作業不應該遲交這麼久,實在是很對不起。

---以下是作業部分----

關於動態宣告二為陣列部分

在老師的C++ Builder Programming Notes部落格中有提到,
還有就是在上課時老師說的學長作業參考,他將文字的敘述寫成code
我上網整個做查詢才整個了解。

用new宣告的時候做迴圈分兩層做動態配置,當然後面也是做迴圈來釋放記憶體。

另外還發現了使用malloc來做宣告的方法可以省掉使用迴圈的部分,
不過沒經過實測所以不清楚使用上會不會比較快速。

以上是這個作業所做的查詢

基本操作,BCB跑出來的畫面…

HW2

這次的作業有點難度,就是它的想法上有點打結,這幾天看老師的blog有說
明這次作業的演算法跟 步驟,自己照著步驟去試試看,不會的再問同學,最
後結果是有出來,在寫的過程中有遇到圖片位移和 圖片大小不一等情況
一開始對sin,cos 旋轉矩陣等這些數學公式有點忘了,再來是旋轉後影像
的長和寬要如何決定,最重要的是旋轉後的數學公式
X=X'*cos-Y'*sin
Y=X'*sin+Y'*cos
這邊卡了有點久,不過最後還是解決了

HW2



心得:
這次旋轉真的是搞很久,光是數學式子就弄半天了,再來是動態矩陣,還有座標位移`找中心點旋轉,這些都有難度,嘗試了很久才是得到目前的成果,但是還是有些地方要做修改。

2009年10月22日 星期四

HW2

主要是將旋轉公式
x=x*cos-y*sin
y=x*sin-y*cos
改成下面的程式碼
iOldJ = iNewI * dCosAngle - iNewJ * dSinAngle;
iOldI = iNewI * dSinAngle + iNewJ * dCosAngle;

做完這次的作業 原來靠程式解決一個問題並不簡單 從普通的數學公式轉換成程式碼以後 還有許多意想不到的問題 感覺最麻煩的就是選轉後如何讓圖片不會被裁掉邊角 而且做完了感覺也不是很好看 看來美化程式介面這方面還要加強 以上 

2009年10月21日 星期三

HW2


之前寫的時候,都是用原座標直接旋直轉的,所以都會把圖切掉,聽完老師上課後的講解才知道問題出在哪裡,不過老師的講解我還是消化了一陣子還加上跟同學的討論才懂,失真的話則是跟朋友討教之後才會,不然因為整數的轉換,有些點都無法顯示出來,還困擾了好一陣子。

2009年10月20日 星期二

這次的作業是做"旋轉"
光是聽到 就覺得有難度

果然
自己下去摸索了一下
還摸不出什麼頭緒來

後來
經過同學的指導

終於大概知道要怎麼做了


好不容易
解決程式上的問題了

又碰到了一個小問題

就是

不知道為什麼
圖旋轉之後 都看不到完整的樣子

原來是要找到圖的中心點
旋轉出來的 才會是出現在中間


試了超久的

終於讓我試出來了

呵呵

好開心

 還蠻有成就感的!!



2009年10月19日 星期一

hw2


這次的作業跟上一次的比真的難很多
很多東西都是卡住拼湊
不然就是請教學長才出來的成果
程式真的不好打
不過這次作業讓我更了解bcb打法
雖然還是不是非常了解程式
但是對於怎麼讓圖旋轉的方法比較熟悉ㄌ
只是打程式還是需要加強
要在努力囉:)

2009年10月16日 星期五

hw2


這一次的作業是旋轉,一開始開檔的那兩行指令沒有問題。
這一次介面的製作比起第一次還在到處找物件在哪裡拉時快了許多。
一開始看到題目,嘗試上google去找關於旋轉的指令去試著寫程式。
找到語法之後,試著打上去,結果在Run的時候出現了幾個意想不到的Bug。
上網找語法不行,轉而向同學求救該怎麼寫 圖片才會旋轉。
每一行慢慢問才搞通。
然後在求他的角度→3.14/3旋轉60度 3.14/3是90度
再去找出圖片的中心點
原來只要先將一開始的圖,將圖上的每一點用for將他的每個點存到陣列,再用公式將他旋轉。
其中在公式的地方摸索了許久。
經過老師在黑板上圖文講解後對圖片旋轉的公式比較有感覺後,
終於在系週會開始不久後,跑出難得的成果。

HW2

這次的作業難處有兩點:(1)旋轉的數學定義(2)程式的編寫
事實上這兩點在網路上都有很多資料可以參考,所以還算是簡單可以完成的作業。

旋轉的公式有兩種(順逆時針的差異),在這次作業中我所使用是順時針的公式。
X'= X*cosT + Y*sinT
Y'= -X*sinT + Y*cosT

展示結果:

打開檔案















90度旋轉














180度旋轉














45度旋轉














135度旋轉














水平翻轉














垂直翻轉














心得:
花了不少時間在找尋BCB的語法跟用法,尤其是動態宣告影像物件的部分找了很久。
一開始以為可以直接存取物件的長寬屬性,結果編譯沒辦法通過,之後才想到要用動態宣告的方法。
圖像旋轉的部分也是嘗試了很久才是得到正確的轉換。

HW02



跟大家的困惑一樣,對於這次作業搞得一頭霧水

上次上課時對於sin cos的轉換沒有說很了解

還是上網尋找了資料以及詢問對BCB稍微較熟悉的同學

一開始轉出來的圖片雖然有達到一開始要旋轉的目的

但不明瞭圖片為何偏離主畫面甚多

後來對於x,y除了必要的角度轉換外


另需要對其作正負調整

x=(int)((i*cosine-j*sine)+270);

y=(int)((i*sine+j*cosine)-70);
目前暫時作出大概的樣子
其中詳細轉換的部分想做更深入的了解
想試試每一點 Pixel 能否不要超出界線以致圖片完整
我想這是我想理解的地方











HW02


當旋轉圖片時
一開始有超出很多範圍
只要從X,Y調整,如下
x=(int)((i*cosine-j*sine)+327);
y=(int)((i*sine+j*cosine)-207);
找出圖片的中心點
旋轉後就不會切到角
此為作業執行的最後結果

hw2

首先先放出這次作業的執行結果

這次的作業
主要是要讓圖片旋轉
乍看之下很簡單
可是實際上他的程式碼要不是網路上有滿多可以參考的程式
單靠自己想破頭也是想不出來的

x = (int)( ( i - xcenter )*cos(1.05) - ( j - ycenter )*sin(1.05) + xcenter ) ;
y = (int)( ( i - xcenter )*sin(1.05) + ( j - ycenter )*cos(1.05) + ycenter ) ;

這是從網路上得到的程式碼




首先遇到的問題是....




這是第一次旋轉後的結果
顯然圖片的左邊被蓋掉了
問了同學才知道
這是位移的問題








for(i=0;i+150;i++)
{
for(j=0;j+150;j++)
{
int x=0,y=0;

x=(int)((i*cosine-j*sine)+200);
y=(int)((i*sine+j*cosine)-100);

Image2->Canvas->Pixels[j][i]=Image1->Canvas->Pixels[y][x];

首先紅色字部分的是讓陣列擴大
因為圖旋轉後
他的長寬會不一樣
所以陣列值要把他放大

再來
藍色字的部分
x=(int)((i*cosine-j*sine)+200);
這是讓X座標的圖點旋轉兼位移
y=(int)((i*sine+j*cosine)-100);
這是讓Y座標的圖點旋轉兼位移

只要從以上這些值修改 就可以讓旋轉後的圖片
可以顯示出完整的圖片

for(i=0;i
{
for(j=0;j
{
int x=0,y=0;

x=(int)((i*cosine-j*sine)+300);
y=(int)((i*sine+j*cosine)-200);

Image2->Canvas->Pixels[j][i]=Image1->Canvas->Pixels[y][x];

}
}
這是修改後的值 可以讓圖片完整顯示出來

THE END

hw2

在課堂上聽到要做影像旋轉
利用cos,sin去做陣列
就覺得很難
回家再嘗試了以後發現根本就是腦袋做了旋轉
所以就上網去查資料
以下就是旋轉出來的成果


這是讓影像做45度的旋轉

float radians=45;


這是讓影像做40度的旋轉

float radians=40;

但是不曉得為什麼轉到其他角度之後就會讓圖形翻轉過大而看不到圖

這是很讓我困擾的一點

尤其是在每一次的翻轉之後都要再調整一次他所旋轉的中心點

image2才會顯示完整的一張圖

而且連同image2大小的不同

也會切到圖片的一部分這也要去做調整

轉圖的這個動作真的很難

希望可以再多做修改

HW2

在這次的作業方面
因為先前接觸BCB的次數並不多
且並未嘗試過選轉圖片的功能
所以這次除了自己去搜尋資料外
也必須請教同學有關於旋轉公式的部分
所以也是得知了sin以及cos的應用後才知道如何旋轉
因為也是第一次使用圖片的互相讀取部分
所以也花了一些時間去理解除了開圖檔外的互相圖檔讀取的code
這次利用的角度公式除了課本上的提供外
另外查詢了網路上資訊網站的用法

x = (int)( ( i - xcenter )*cos - ( j - ycenter )*sin + xcenter )
y = (int)( ( i - xcenter )*sin+ ( j - ycenter )*cos + ycenter )

於公式中的X以及Y中心點
因為旋轉的關係所以如果直接抓取圖片的中心點的話
會產生圖片顯示不完整以及顯示的陣列存取點顯示在不是我們想要的位置
所以在 i 以及 j 的存取點扣除顯示的部份要另外算
而且在最後加上圖片的中心點也要依照自己設定的Image2做更改動作

旋轉-45度角的結果:





因為經過換算的存取點有點計算錯誤,所以導致圖片有點被壓縮成正方形了


旋轉角度45度:




同樣是以45度去作旋轉
但是每個參考的存取點都不相同
所以即使旋轉的角度相同
但是旋轉的方向不同
就要另外去計算中心點的狀況
這算是這個公式的缺點之一
所以就初步的旋轉動作是成功了
但是要正確的將圖片顯示出來就必須另行運算多次才能成功
算是還需加強的部分

HW2

第二次所要做的作業是影像旋轉
可是寫著寫著~差點把腦袋給轉暈了>"<

碰到了不少的問題
一開始BCB就搞烏龍了,好像是連結上的問題
上網查了很久~最後只需要重新建立一個新的Project就行了
可是代價就是...之前的作業檔案被洗掉
得上網把備份資料在重新抓回電腦內才能繼續使用
不然就得重新寫過= ="

接著還遇上一個花了很多時間才解決的
address error...
花了很長時間在這上面只為了一個小地方打錯
害我找半天~氣死惹!!
ImageHeight跟ImageWidth因為偷懶用複製貼上的
忘記把Height改成Width
雖然執行編譯器會過,可是執行結果會出問題

三角函數的使用上
也花了不少時間
程式碼的某個地方
我使用了power
但是include的地方
卻有點被搞混...
#include "math.hpp"跟#include "math.h"
似乎少了其中一個,程式都不能執行

好在~總算把圖給轉出來了
很明顯的...我轉的不好
應該還有很大的問題得更正
這是我現在轉圖的方法
Image2->Canvas->Pixels[i][j]=Image1->Canvas->Pixels[i*cos(x)-j*sin(x)][i*sin(x)+j*cos(x)];
現在的狀況好像是抓著(0,0)的位子當中心點在轉
所以圖片最後顯示很奇怪...
暫時還想不出來解決的方法
再研究囉>"<

HW02

這次的作業是在做影像旋轉
感覺一直要算角度
所以很麻煩
不過我先以對角線當做新圖片的寬高
然後再計算圖片旋轉後的大小
動態宣告一個二維陣列存放旋轉後的圖片
在轉圖的時候 i 跟 j 很容易搞混
所以 x軸跟y軸要非常清楚才行
不然很容易就會轉錯邊
這次也決定用LENA的圖
用了好久角度好難抓
一直找不到原因
試了幾次終於試出了
作業越來越難
所以要加油了

hw1


作業上傳說實在的,實在是有點晚了。
不過BCB這程式我使用上真的是困難重重,第一個是連安裝檔都沒有,好加在有朋友協助、第二個是沒有用過這個程式編輯,他的程式跟C#差不多,但是寫起來又有點那麼的不同、要在有限的時間內抽出時間學習BCB....總之這個東西寫得出來真是費盡我千辛萬苦,雖然程式碼東剪西貼,不過要弄懂也是花了段時間。

2009年10月15日 星期四

hw2 (修正版)

示意圖















由於先前的不是課程上所要求的

所以就重做了一下



不過還是看得出來旋轉後的圖失真了

我自己在想

會不會是因為原圖的Pixel都是int值

旋轉到目標角的點上時發生float問題

新像素的初始值原本都是整數點

所以旋轉的過程當中

一出現小數點就Null

導致圖片失真了



所以我在想,是不是需要使用反鋸齒來修飾失真的問題

不過一提到反鋸齒好像又把問題搞大了不少

但是新的像素原本就是一個一個像素點構成

就像

口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口
口口口口口口口口口口口


所以如果像素點一轉到口跟口的中間

就只能被Null掉

畢竟新創的畫布也是一個一個整數點構成的

旋轉成傾斜的不太可能不會失真

我也不知道我說的對不對

不過個人感覺是如此啦

HW2 - 影像旋轉

這次的影像旋轉真的有難,難在太數學了...

把找得到的公式copy上去後,我得到下面這個結果:















右邊是旋轉過的圖片,很明顯的可以發現有很多小白點.
這是由於在旋轉的計算過程中,有些點會因為四捨五入的關係而被忽略,進而未被處理到.

嗯...該怎麼說呢......(假設原圖開在Image1,處理過後秀在Image2)
如果將原圖的座標換後填入Image2,那有些點被捨去後就會留下白點.
所以換個角度想,那如果先算出Image2需要多大,再反推回來求對應在Image1的點,那就不會有這問題.

至於偏移的問題,公式在網路上就可以找到了,就不在這裡多談.
下面這張是順時鐘旋轉37度:

















下面這張是逆時鐘旋轉75度:

2009年10月13日 星期二

第一次學BCB這軟體

感覺有點陌生

之前因為沒有這個軟體

所以一直到現在才上傳

呵呵

不過

經過同學和老師的指導之後

總算是做出來了!!!


我相信

經過之後的課程

和自己多練習之後

應該可以做得更好 ^^



2009年10月11日 星期日

Hw2

1011

這次作業是做旋轉,之前在多媒體概論的時候有自己做過90度跟180度的旋轉。
所以自以為的這次的也應該不會太難.....但是在實做的時候發現有很多的東西要考慮。
首先是旋轉的角度,怎麼樣在旋轉過後讓圖片完整呈現出來。
再來是第二個陣列的容納量可否容納的下旋轉過後的長跟寬。這都是必須要去考慮的~"~
實際打了程式試驗完以後,卻發現圖片是旋轉了但是有被剪掉的和重複到的地方。

問題:

圖片重複的地方我猜測是演算法的錯誤,因為我在裡面有用到abs函數,所以數值有可能重複。

而被cut掉的地方我想用圖片的位移不知道能不能解決.....

待續@_@~


1015

經過幾次的測試....它終於可以正常旋轉了....
在程式碼方面,跟上一個圖案的差異性滿大的。
首先,因為之前是拿第一個作業的程式碼下去改寫的,所以一直陷入去對RGB陣列的元素做運算的迴圈。後來才想到,其實好像不用,只要把圖片的點旋轉就好,不需要用到RGB。

再來是使用cos sin函數 發現其實只要直接使用include裡面的math就可以使用cos跟sin這兩個函數了= = 不用自己在那裏亂算~"~

因為我是直接使用Image1->Canvas->Pixels[j][i]=Image2->Canvas->Pixels[j][i] 所以圖片在旋轉後多出原始圖片長寬的部分就被剪掉了@_@~這方面還沒做改進。

剩下的就是數學的公式了~旋轉的角度以及旋轉後的位置都是要考慮的因素~不然圖片會處理完後會亂跑= =

還有一個問題就是.....轉完以後顏色會稍微失針@@~~這我就不知道怎麼解決了~"~

2009年10月10日 星期六

hw2














這是我demo的介面.在寫作上.我用很多沒有效率的方法來避免問題.
像是宣告一個足夠大的陣列來存放旋轉過後的圖片.邊界問題則用平移來解決.
不過即使這樣.我還是遇到一些計算上的困擾.
像是弧度量轉角度.因為在使用cos sin這些函數.這些函數的內定直是給弧度量
而我們比熟悉的卻是角度.所以需要稍微轉一下

這公式給大家參考一下:
th=(angle*3.14159)/180;//th是弧度量 angle則是角度
// 輸入角度之後用這公式轉呈弧度帶入function


看似好的成果其實有很多瑕疵.像是上面這張deom我就用完美的角度來轉.90180...等.在旋轉上不會有破碎的問題.但如果遇到其他的角度.則會有圖片破碎的問題


















因為在旋轉計算的過程.小陣列轉到大陣列裡.總有一些直沒辦法完全的填補過去.所以會有破圖的情況.也因為這樣.圖像多少會有變大或縮小的感覺.

給大家一個提醒:

在轉圖的時候 i 跟 j 很容易搞混 x軸跟y軸要非常清楚才行.一開始我沒有用很清楚.轉出來的圖會不同邊

2009年10月9日 星期五

HW01















這個作業其實還蠻容易的
只是用程式來開啟圖片
然後顯示出RGB的值
因為是二維陣列的圖
所以還要去設定它的長與寬
雖然一開始宣告的部份遇到了小小的困難
因為我ㄧ開始只宣告一個二維的陣列
所以到後面就不知道要怎麼讓程式順利的執行
結果
才知道因為有R.G.B三種
所以要宣告三個二維的陣列
害我搞了老半天
雖然二年級有學過BCB
但其實我的程度也不好
所以對於這第一個作業
有點陌生
出了點小差錯
不過好再解決了
也順利的把作業給做出來

HW01


程式的部分:

首先先開啟一張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]);
 }
這堂課是用BCB的程式來做的
以前有別堂課的老師有用BCB來上過課
所以還算容易上手
但是有一個地方有點不知道該怎麼做
後來問了別人才了解
如何讓滑鼠隨著移動顯示RGB值
實作方式就是在顯示圖的物件上點一下再到左邊的小視窗
把標籤切換到"Event"後有個叫"OnMouseMove"的欄位
在空白欄位上快點兩下
就會在程式碼那看到一個空白的副函式
它的宣告變數中就有X和Y
所以可以利用這兩個變數去控制顯示滑鼠目前所在的位置的值
好不容易解決了問題
順便提到
LENA的圖片好正ㄏㄏ
大家看了應該也會很開心吧
第一次做影像處理的作業
還需要更了解關於制方面的事 
相信下次應該會更好!

HW01


這是一個成功的圖片,有算出這張圖RGB的總合,不過在宣告二維陣列的部分還是有一些小疑問,不知能不能問老師。



還有這是一個成功讀取得圖片(當紅的臉書餐廳),可是問題是讀不出他的RGB值,明明都是RGB圖都可以讀入,但為什麼上面圖可讀出下面的就不可呢?
是個讓我有點疑惑的地方。