2009年10月26日 星期一

Homework2


這一次的作業二要將圖片轉灰階
雖然很早之前就在弄了
可是弄半天卻弄不出來
一直四處去問有學過BCB的同學
去看每一程式
找問題在哪裡
搞半天元在在一開始弄陣列就寫不對了
後面當然怎麼寫都沒反應
寫程式最怕寫了編譯會過但執行跟自己想要的畫面不一樣
因為編譯不過還可以有辦法除錯
但編譯過卻不是想要的令人頭痛啊~~
不過現在終於弄出來了~感到太不可思議了!!

HW2



這次作業 在詢問同學之後 終於寫好了
我覺得剛開始有點小麻煩 還好最後還是
比較了解 怎麼使用將彩色影像轉為灰階影像
所 以感覺很不錯 至少沒有空手回去的感覺 有學到一點東西了
其他的指令應該很快就會在學到了

2009年10月23日 星期五

HW2


聽了老師這幾週上的課後,對影像有了初步的認識,像是影像如何壓縮,影像如何組成等。
這次的作業是將彩色影像轉為灰階影像,程式方面並不會太複雜,利用公式就可,最後影像就可順利轉為灰階了,感覺還蠻有趣的。

HW2





心得:
這次的作業,並沒有很難,流程大致上是先把叫出來的圖片判斷出是幾位原色彩後,再轉換成灰階影像。前面先用switch判斷Pixel值,case轉換成文字幾位原色彩後,再來把之前圖片RGB的值+起來在除以3即可轉換成灰階影像,還算蠻OK的。上過幾堂課後,開始比較了解圖片在電腦中儲存方面的各種知識了,在枯燥的打程式中,加入了圖片影像學習,感覺就比較不會那麼無趣了,做完後看到成果也感覺比較有成就感,修課到目前的為止感覺還蠻不錯的,在繼續加油囉!

HW02

這次的作業是要把彩色圖片變灰階,並且把讀到的位元顯示出來,
一開始我有想到是把色彩值做變化,
想說是不是把得到的色彩值除以2就可以了,
我記得好像125是灰色的
是有這樣想 可是卻不知道如何下手,
要如何讀色彩值當時的我是一竅不通,
後來老師公布了片段程式碼,
咦~原來指令跟中文意思是一樣的,
GetRValue//取的紅色的色彩值
GetGValue//取的綠色的色彩值
GetBValue//取的藍色的色彩值
去讀每個點的RGB值,然後做些運算
開始 先得知圖片的長寬 因為每個像素就是一個X,Y
所以一定要使用FOR 迴圈來讀取每個像素點
一切都很順利可以讀到每一個點並且將其直存到node的變數裡頭
奇怪的是,圖片的顏色怪怪的,部分是灰階色彩,部分卻變成有如曝光般的顏色















以下是我的程式碼:
int X,Y,node;
for(X=1;X<801;x++) y="1;Y<601;y++)" node="(GetRValue(Image1-">Canvas->Pixels[X][Y])
//Pixels[X][Y]) 位於(X,Y)座標的像素
+GetGValue(Image1->Canvas->Pixels[X][Y])
+GetBValue(Image1->Canvas->Pixels[X][Y]))/2;
Image2->Canvas->Pixels[X][Y]=RGB(node,node,node);
}

吼~原來,因為一次是讀RGB三個點的關係,所以要除以3才對。
聽同學說 老師有講,喔不= = 我不是故意沒聽到的!!
可是最後作出來的時候,有種爽快感呢!!
















成功!!

2009年10月22日 星期四

HW2

大致上流程就是這樣

























雖然說是彩色圖片轉換為灰階圖片

但還是同樣為24位元的影像


在過程當中原本想說要把rgb調成黑灰色的組合


這樣感覺好像有點偷懶但事實上有夠難調整的

後來詢問同學才發現原來只要將原數值除3即可完成


但還是覺得有點疑惑但我想這應該是因為對於bcb的不熟悉

希望在未來幾週可以好好的熟悉這個平台

因為在這兩週的作業裡面我已經感受到bcb比平常用的vc++人性化一些

如果再未來能好好的修練成功 應該是項很好的武器才是

HW2

這次的作業是把彩色圖片轉換成灰階圖片,這是設計成品。











把RGB 三原色相加除以3就能實現灰階的想法了。
Gray=(GetRValue(Image1->Canvas->Pixels[X][Y])+GetGValue(Image1->Canvas->Pixels[X][Y])+GetBValue(Image1->Canvas->Pixels[X][Y]))/3;
過程中遇到點小問題,沒辦法顯示轉換過後超出範圍的部分,這讓我想了許多時間,最後是把Image2的大小再開檔時就定程Image1的大小,這樣才解決。












在這裡我一直想再轉換過後的圖也能塗鴉,想法是實現了,但是卻產生很多的BUG。像是先在Image2塗鴉過在載入圖片,就會發生圖片被放大的情況。思考了很久,最後還是放棄了這個想法。此外還遇到一個問題,就是如果執行程式後滑鼠移到了要轉換的那個影像元件上,他會自動變白,載入圖片後,就發生轉成灰階圖片只有看到的部分,其他部分還是空白的。這個問題我用了很久還是沒有解決。

HW2


這次的作業是把彩色影像變成黑白影像,雖然變成黑白影像但同樣是24位元,可能因為只是把每一個彩色的點的三原色照比例混和成黑白灰的顏色,所以基本上它仍然是一種"彩色"的影像。

HW2


這次作業 很直覺就想到一年級程式設計課時的內外雙迴圈方陣。
照著前幾堂課學到的,順序讀取圖片每個像素RGB總和除3化成灰階再覆蓋到另一張圖上,
要完成覺得沒想像中困難。
原本還在想,要開一個一樣大小的空白圖片,用來放置轉換好的像素色,
後來再想何必那嚜麻煩,直接讀取原圖再每個點覆蓋就好嚕哀。

不過完成後實際操作總感覺執行時間好久,在想說市面上的軟體應該不是這樣轉換的吶。
這想也對,畢竟只是仿其型... 期望能早日做到如同市面上那般成品。

碎碎念:因為自己的電腦還沒安裝好BCB,網路上找到的好幾個載點都是死掉的,
所以只能在上課前的午休時間趕緊來完成...
在編寫時候有股好大的慾望,尤其在遇到些意外的小問題時。
想說時間快到嚕,而反正同學也完成嚕參考一下馬上就可以解決,
最後好大定性才忍住,自己編完全部....
回去要快點找到有效載點哀~~


數媒HW2

這次的作業是把全彩的圖片轉換成灰階圖片
老師說其實公式很簡單
只要把RGB值相加起來再除以三就可以
也就是 -> (R+G+B)/3

這張是我轉換的結果
01

但是,這是色彩數比較少的圖片作轉換的情況下
如果把色彩數調高後再進行轉換結果會一樣嗎??
所以我又弄了幾張做實驗

02 03

04

05

看來,不論使用的是比較高色彩的繪圖圖片
或是真人照片都不會影響她的灰階變化

原來所謂的灰階照片就是這樣做出來的
那,相機裡面常見的除了灰階變化外
還有一種叫做負片效果
不知道那個是怎麼弄出來的?
我想應該差不多吧?

HW2

這次作業是把圖片轉成灰階儲存起來,而轉成灰階有兩種方法(R+G+B)/3和0.299*R+0.587*G+0.114*B,

怎麼看都是前面的加起來除以3比較好記,

所以在做的時候當然是選用這個方法來做,

一開始不知道怎麼把第一張圖轉到另一張圖,

後來只能用一點一點畫上去,然後就要先記錄第一張圖的長寬再一點一點抄過去,

圖像的格式因為上課有看老師做過了,所以這部份就比較沒有困難。



首先點擊Open會出現如上圖,選擇要開啟的檔案,



開啟完成會如上圖顯示,接著點選"轉換灰階"讓圖片依照上面所說的方法去轉成灰階。



完成會如上圖顯示。接著如下圖點選Save





最後會存在與開啟檔案的同一個資料夾內,如圖顯示,檔名固定為"PicGray.bmp"

HW2

此次程式作業目的把圖片轉換不同的位元和顏色,雖然在實做時候有點不知所措,不知道從何開始做起建立程式對話視窗。




親自實作邊看著BCB課本,遇到不少轉換圖片顏色問題,
如何把一張照片載入之後,再點選轉換按鈕,就可以得到想要招片轉呈灰色結果,
都需要去面對解決,建立能轉換圖片位元及顏色和按左鍵和右鍵的函數以及圖片和顏色對話窗與法。
只是稍微內部程式碼調整一下而已,但看似簡單的動作,實際上並不是如此
最後才了解到搭配在一起的功能和作用。
就跟小畫家程式一樣的實用感覺。

HW2

本週作業:
讀入一個 24-bit 彩色 .bmp 影像
並將其轉換成 8-bit 灰階影像儲存!


基本上沒太大的問題
要轉換成灰階的做法,課堂上提示的 (R + G + B) / 3便能搞定

但是仔細想想題目,8-bit 灰階影像,又會有點疑問
8 bit = 256色,儼然算是彩色的影像
但又為何會跟灰階影像扯上邊呢?

存在著這疑問同時,上網想找其他轉「8bit灰階」的做法時
碰巧查詢到直接指定PixelFormat=pf8bit,但是這樣的效果為











得知的確8 bit是能夠呈現不精緻的彩色影像
所以為何不是用2 bit灰階、4 bit 灰階,而是選用 8 bit 灰階呢?
是因為24 bit的 R + G + B 除以三就是等於 8 bit嗎?
寫完程式才又突然想到..
2 bist有4種顏色,無法構成彩色圖像
4 bits有16種顏色,就算能構成彩色圖像也很難看
而8 bits可以儲存256種顏色,色彩值雖多但無法達到精細

那反過來..如果不是存彩色,而是存灰階色彩
反而可以構成非常精細的灰階圖像呀~


以下配合截圖說明程式

1.啟動畫面













程式畫面由
MainMenu(Open、Save、Exit)、
GroupBox、
Image方框、
ScrollBox、顯
示圖片位元的Label、
轉換的Button、
Reset Button、
進度條
其中MainMenu的Save、Transform Button為不可使用;
Reset Button、進度條為隱藏


2.開啟Bmp圖檔














3.載入圖片













Load 影像至Image1、偵測影像的位元值、Transform Button設定為可使用



4-1. 開始轉換












顯示出轉換進度(一開始適用來Debug),Transform Button設定為不可使用


4-2.轉換中












加了一行Application->ProcessMessages();
讓程式不會有不回應的狀況,畫面從左而右依序轉出


5.轉換完成













轉換完成彈出Messeage視窗提示


6.Save影像













在Messeage視窗按下確定後,進度條恢復隱藏、Save為可使用、Reset Button顯示

此時若選擇Open載入影像,則會回到第三張截圖的狀態 (包含Save Disable、Display Transform Button、Image2 Clean)


7. 儲存的灰階圖檔











選擇Save後,會產生出一個Gray.bmp的灰階影像




另外以這張貓咪的Image為例,實際影像大小為480 x 360
而載入Image1的方框時,設定縮放80%(384 x 288)
在轉換時則須依照原影像大小操作
因此在轉換的過程中,灰階圖片會比原圖片來的大
若鎖定Image2方框大小(AutoSize為false),轉換後的影像會被裁切;
若設定AutoSize為True,轉換過程Image2的方框會擴大
因此拉了一個ScrollBox來放Image2,順利解決這個問題
但還是想要嘗試看看在轉換的過程中,能否直接同步顯示出縮放的影像,
而不用等到轉換完成後再縮放,不知道能用什麼方法達成?

HW2



本次作業是將一張24bit的彩色圖轉為灰階
所執行的結果,就是下圖所呈現的!上圖為介面圖示
上課所說的兩公式我把他抄了一下來
(R+G+B)/3  and  0.299*R+0.587*G+0.114*B
我採用的是 0.299*R+0.587*G+0.114*B
因為接兩樣都測試後發現(R+G+B)/3出來的結果比較黑顏色上區也別比較少
然後再利用for迴圈來一個一個pixel 轉為灰階下為部分程式碼
ProgressBar1->Position=0;
for(int x=0;x<=Image1->Picture->Bitmap->Width;x++)
{
for(int y=0;y<=Image1->Picture->Bitmap->Height;y++)
{
int color=0.299*GetRValue(Image1->Canvas->Pixels[x][y]) + 0.587*GetGValue(Image1->Canvas->Pixels[x][y]) + 0.114*GetBValue(Image1->Canvas->Pixels[x][y]);
Image2->Canvas->Pixels[x][y]=RGB(color,color,color);

}
ProgressBar1->Position++;
}
另外我還有加上進度表示軸ProgressBar1
以免在執行的時候像當掉一樣
但有一個小問題就ˋ當我執行完時假如image的大小比原圖小就會超出範圍不會自動縮小
試了好幾次都沒成功這還有待研究!!!


HW2


要把彩色的24bits的bmp檔轉成8bits的灰階圖片,事實上還真有點難搞,很多誤見我還是搞不清楚在做什麼,要一個一個的摸索,上課的專心度還是有待加強,,請教同學之後才得知,原來詼諧是把RGB除3之後公式:"(R+G+B)/3"或是 "0.299*R+0.587*G+0.114*B",影像就會變成灰階,不過還是花了不少時間弄,好像bcb也沒有很難只是有沒有心去打而已,程式出來的時候的成就感好爽。

HW2


將一個 24-bit 彩色 .bmp 的影像,轉換成 8-bit 灰階影像儲存,

然後所執行的結果,就是上圖所呈現的!

上課所說的兩公式我把他抄了一下來
  (R+G+B)/3  and  0.299*R+0.587*G+0.114*B

然後再對照那本厚厚的課本C++ Builder
6

還問了做完的同學,才把我這項作業完成。

做完的心得是...非常的有趣。

這門課跟程式語言不太一樣,雖然都是有程式碼。

但這門課有趣多了~




hw2

這次的作業是把圖片由彩色轉為黑白, 一開始我有一個
想法,可不可以把RGB 的數字改成變成黑白色的數字然
後讓圖片直接變成黑白色,但是問了同學後, 他告訴我
不可以,後來原來發現是RGB各除以3,我想請問老師
這個想法是可以行得通嗎?我對BCB其實不是很了 解。
後來到同學家去學習怎麼做這次的作業 ,發現一點都沒
有想像中的難,步驟很少很簡單,但是我對裏面的程式
碼,還不是說很相當熟悉,跟c++比起來, 清楚很多
也比較容易懂,只要記得順序 ,再來記住程式碼的用途
,其實也是很 輕鬆寫意的。
下面是我這次做的作業,因為很多人都 PO程式碼,我
想應該都大同小異所以 只PO了完成版的作業。

下次上課希望老師能夠多講解程式碼裡面的意義,因為我對那個不是很熟悉,謝謝老師。

這次作業是要將彩色的BMP影像轉換成灰階影像,
首先把物件拉好。


再來就是寫入老師上星期說的判別bmp影像的switch case,基本上的讀檔跟判別已經沒問題了。
如下圖:



比較麻煩的是轉換成灰階影像的邏輯公式,之後用兩個迴圈跑(R+G+B)/3才把每個像素轉換成灰階複製到另一個圖裡

YA~You get it!! ~(σ ̄▽ ̄)σ
影像轉換完成!
這次這像素從rgb 轉換為灰階的邏輯讓我卡了一段時間,不過實際作出來時還是有種小小的成就感,但是對於BCB的物件應用還是不夠熟悉,看來還需要好好的摸索。

HW2






這是一開始尚未載入圖片的畫面!











這次的主要作業是,把一張bmp的圖片由24位元的圖轉換成為8位元的灰階圖片,其實在這樣實作的過程中,發覺基本的步驟都大同小異,主要是需要去思考該怎麼活用各個工具,當然還需要一些邏輯去思考輸入怎樣的程式碼能輕鬆的達到我們需要的效果,大部分的程式碼老師都有提供讓我們去使用,只是往往遇到一些瓶頸,死腦筋就會常常轉不過來....感覺做這科的作業,比我們
現在學的資料結構簡單的多,因為比較趨近於人性化,程式碼也比較容易懂。



















這張圖片的左側是24位元圖,而右側則是轉換過後的8位元圖, 這是上個禮拜最新教的使用BCB的一些功能,說實話對於BCB這個程式還真的蠻陌生的,以前知道的就是只要用一些繪圖軟體,或者專門來修改圖片效果等等的軟體,就可以讓同一張圖片產生截然不同的效果,而現在輪到自己去著手製作,就發現,其實要製作一個視窗化的簡易軟體,就必須要具備蠻多專業能力的。
雖然感覺起來目前程式碼比較易懂,但是常常會在輸入程式碼或者編輯的時候搞混。




















而這個則是最早之前做的東西,像是在圖片上由滑鼠點擊劃線,還有滑鼠左右鍵點擊處顯示出它的顏色,因為之前第一次作業沒交,自己也覺得很糟糕....所以就當作自己複習一下,至於老師目前新教的東西,有些我還不是很熟悉,例如像是讓圖片上下左右可以產生滑動效果之類的,這方面我會自己更努力加強。

HW2









<--先貼一張24位元的原圖








要讓這張圖轉換成8位元的灰階圖

利用迴圈來讓原圖的每個圖格都讀到
將其一一轉換成8位元灰階
其公式有下面兩個
Gray=(R+G+B)/3

Gray=0.299*R+0.587*G+0.114*B


只後點擊"轉換"就會變成




















最後只要將圖片儲存

這次的作業跟第一次比起來容易很多,
因為只要在原本做過的程式上多加上幾行程式就可以轉換成功了。
雖然用Builder來轉換是還蠻容易的,
但如果只是要做圖層的修改或其他,
還是photoshop會更加容易且方便。