顯示具有 98360365 吳昊穎 標籤的文章。 顯示所有文章
顯示具有 98360365 吳昊穎 標籤的文章。 顯示所有文章

2010年12月16日 星期四

SONY 3D展 hw3(心得.分析.3D圖.調色盤)

3D展心得:
今天我們來到了 板急,我覺得很新鮮,因為這是上大學後的第一次"校外教學"。

今天令我最印象深刻的其實是....電影"海洋生態" 因為它讓我有種距離很近的感覺,小魚比較沒有那種感覺,不過,比較大隻的魚一出現時,感覺他就在我眼前游來游去,就好像真的在我身邊。所以我對這電影特別有感覺,不知道是不是我的錯覺,我覺得 越大的東西,他的3D感越明顯。尤其是它如果往攝影鏡頭的方向前進的話,那根本就覺得它好像要衝出螢幕一般。

最後特別感謝 老師,能帶我們去在 3D展,也讓我們留下很深的回憶,就覺得明明大家都在學校 坐在椅子上上課,結果 我們竟然能那麼輕鬆的在大台北的街道上 擴展知識。別有一番趣味,又能增添自己的知識,希望以後還有機會。多逛逛一些有關資訊的展覽。


3D圖:

步驟(一): 先讀入一張照片,用自做的軟體,取出照片的RGB值,其中先把 R值*1.5倍,讓整張照片看起來偏紅。

temp=(GetGValue(Image1->Canvas->Pixels[i][j]))*1.5;
if(temp>255)
ucRed1 = 255;
else
ucRed1 = (unsigned char)temp;
ucGreen1= (GetGValue(Image1->Canvas->Pixels[i][j]));
ucBlue1= (GetBValue(Image1->Canvas->Pixels[i][j]));
Image1->Canvas->Pixels[i][j]= (TColor) RGB(ucRed1,ucGreen1,ucBlue1 );
}
}

我之所以會多宣告一個float的temp是因為怕說ucRed*1.5會爆掉 也就是超過255,所以我先用temp去收他的值 再去判斷她有 也就是超過255,所以我先用temp去收他的值 再去判斷它的值有沒有超過255。




步驟(二):在讀第二張照片,而這張照片我要讓他看起來偏藍,所以做法跟步驟(一)差不多,只是我這次是把B值*1.5,讓整張照片看起來偏藍色。當然我這次也有宣告temp來收*1.5後的值,因為還是要以防萬一。

float temp ;
ucred2=(GetRValue(Image2-">Canvas->Pixels[i][j]));
ucGreen2=(GetGValue(Image2->Canvas->Pixels[i][j]));
temp = (GetBValue(Image2->Canvas->Pixels[i][j]))*1.5;
if(temp >255)
ucBlue2 = 255;
else
ucBlue2 = (unsigned char)temp;
Image2->Canvas->Pixels[i][j]= (TColor) RGB(ucRed2,ucGreen2,ucBlue2 );
}





步驟(三):合成 步驟(一)和步驟(二)的圖片。

ucred3=(GetRValue(Image1-">Canvas->Pixels[i][j]))/2 + (GetRValue(Image2->Canvas->Pixels[i][j]))/2;
ucGreen3 = (GetGValue(Image1->Canvas->Pixels[i][j]))/2 + (GetGValue(Image2->Canvas->Pixels[i][j]))/2;
ucBlue3 = (GetBValue(Image1->Canvas->Pixels[i][j]))/2 + (GetBValue(Image2->Canvas->Pixels[i][j]))/2;
Image3->Canvas->Pixels[i][j]= (TColor) RGB(ucRed3,ucGreen3,ucBlue3);
}
}

之所以要都/2 是因為我要讓他們 每張圖各占一半。然後融合成 新的圖 ,也就是3D圖。





改了一下程式碼以後.....我用老師部落格的比例下去做!!

第一步:一樣先取紅值!! 不過我只取紅色,其它色都取0....
temp= (GetRValue(Image1->Canvas->Pixels[i][j]))*1.5;
if(temp>255)
ucRed1 = 255;
else
ucRed1 = (unsigned char)temp;
ucGreen1= (GetGValue(Image1->Canvas->Pixels[i][j]))*0;
ucBlue1= (GetBValue(Image1->Canvas->Pixels[i][j]))*0;
Image1->Canvas->Pixels[i][j]= (TColor) RGB(ucRed1,ucGreen1,ucBlue1 );




第二步:我取"藍"和"綠"值,紅值我給取0
ucRed2 = (GetRValue(Image2->Canvas->Pixels[i][j]))*0;
ucGreen2 = (GetGValue(Image2->Canvas->Pixels[i][j]));
temp = (GetBValue(Image2->Canvas->Pixels[i][j]))*1.5;
if(temp >255)
ucBlue2 = 255;
else
ucBlue2 = (unsigned char)temp;
Image2->Canvas->Pixels[i][j]= (TColor) RGB(ucRed2,ucGreen2,ucBlue2 );



第三步: 2張圖和成 就是 各值/2 再相加
ucRed3 = (GetRValue(Image1->Canvas->Pixels[i][j]))/2 + (GetRValue(Image2->Canvas->Pixels[i][j]))/2;

ucGreen3 = (GetGValue(Image1->Canvas->Pixels[i][j]))/2 + (GetGValue(Image2->Canvas->Pixels[i][j]))/2;

ucBlue3 = (GetBValue(Image1->Canvas->Pixels[i][j]))/2 + (GetBValue(Image2->Canvas->Pixels[i][j]))/2;
Image3->Canvas->Pixels[i][j]= (TColor) RGB(ucRed3,ucGreen3,ucBlue3);



心得:
其實用BCB寫真的不難,只是我一開始演算法用錯了,一直給它亂成數值,被自己成到數值爆掉都不知道。
後來經過來老師的說明和教導,我才發現原來我之前的做法都是錯的,因為我都給他亂成數值。
還有...其實我覺得拍照是最難的部分,因為你要抓適當的角度,還要找是合的環境,因為有些照片拍起來很難有3D的感覺,所以你要同一個廠頸去拍很多張不同角度的照片,難後一張一張的慢慢試,還步一鄧會有結果,因為可能是你找的環境原本就沒有遠近的感覺,所以很難有3D感。
我以我覺得做這個作業,需要花一點心思,不能草率,不然就算給你做出來,圖也不好看,也沒想要的3D感。 像我拍的這張,我的取景就不怎麼好,所以他的3D感覺沒有那麼明顯,我見一之後想做3D的圖片時,重要的拍照,一定要特別獎就拍照的品質,就好要帶個腳架。程式碼並不是重點,因為程是真的不難。


2010年12月8日 星期三

98360365_吳昊穎_動畫_hw2

成品(點擊才會動)


心得
圖片有點難找,要GIF檔 大小又要一樣,真的不好找。
所以我後來用小畫家自己畫!!本來我是想用自己寫的軟體來畫,後來發現我的軟體只提供BMP檔,所以我來是用小畫家畫。 一個好的動畫並不容易!!因為每一個小細節 or 一個小動作,有可能就要再新增一張圖片。所以一個動畫其實是需要有很多很多張圖片製作而成,如果圖片不夠多,做起來就不像動畫,而只是一張張圖片在那裏轉換。


我的製作過程





我是先畫好2張底圖,在來每張圖檔都用這2張當背景,作其中的變化。
















GIF分析:









調色盤:



心得:

其實我們可以從這個字做的軟體來知道 關於一張GIF圖的 檔頭資料,我們都可以將他們讀出來。
不過...前提是你要先知道GIF裡面內容是如何設計,哪幾個Byte是在做什麼,這樣我們才能用fread把他們都讀出來。
fopen: 語法: int fopen(string filename, string mode);

返回值: 整數

函數種類: 文件存取

字符串參數 mode 可以是下列的情形:


'r' 開文件方式為只讀,文件指針指到開始處。
'r+' 開文件方式為可讀寫,文件指針指到開始處。
'w' 開文件方式為寫入,文件指針指到開始處,并將原文件的長度設為 0。若文件不存在,則建立新文件。
w+' 開文件方式為可讀寫,文件指針指到開始處,并將原文件的長度設為 0。若文件不存在,則建立新文件。
'a' 開文件方式為寫入,文件指針指到文件最后。若文件不存在,則建立新文件。
'a+' 開文件方式為可讀寫,文件指針指到文件最后。若文件不存在,則建立新文件。
'b' 若操作系統的文字及二進位文件不同,則可以用此參數,UNIX 系統不需要使用本參數。
fread:
語法: string fread(int fp, int length);

返回值: 字符串

函數種類: 文件存取

內容說明

本函數讀到指定長度的位組或到文件尾 EOF。




fseek:

語法: int fseek(int fp, int offset);

返回值: 整數

函數種類: 文件存取

內容說明

本函數將文件 fp 的指針移到指定的偏移位 (offset) 上。使用本函數就像 C 語言中的 fseek(fp, offset, SEEK_SET) 函數。成功則返回 0,失敗則返回 -1 值。當 fp 由 fopen() 打開 "http://...." 或是 "ftp://...." 等 URL 文件時,本函數無法作用。

2010年11月10日 星期三

WH1


1.基本圖型: 原形 長方形 正方形 六邊形 三角形
心得: 這些寫起來其實不難,因為老師上課都教過了,如果上課有注意聽,相信不用幾分鐘的時間一定都能寫出來。

2.移動功能(當滑鼠移動Button上時 圖形就會左右移動)
心得: 說穿了只是換方向,就是設定當圖形移動到那時,圖形移動的方向變成反方向 這樣一來你的圖形看起來就會左右移動。


3.橡皮擦(寫錯 可使用它)
心得: 這個功能是我花最久時間的一個,一開始我是想直接宣告一個2維陣列,讓他在圖形剛被開啟時就先存取他的色彩值,可是這個方法,好像是不可行的,我想是我哪裡寫錯了!! 因為她就是不讓我存各點的象素值,園因我也不知道,我也從中改了些許的程式碼,但還是沒辦法。後來我索性得放棄了這想法。我後來想 玩家一定會在元圖上作一些圖形之類的,如果是選擇當下在存色彩值的話一定會失敗!!因為原圖已經被破壞了,所以我用了一個Image2這樣他再怎麼破壞原圖,都只是破壞到Image1的圖,並沒破壞到Image2的圖,然後只要在玩家按下擦步這功能時 就去call Image2的色彩值 如下:
if(RadioGroup1->ItemIndex==6)
{
Image2->Picture->LoadFromFile(OpenPictureDialog1->FileName);
for(i=0;i
for(j=0;j
{
ucRed=GetRValue(Image2->Canvas->Pixels[i][j]);
ucGreen=GetGValue(Image2->Canvas->Pixels[i][j]);
ucBlue=GetBValue(Image2->Canvas->Pixels[i][j]);
if ((abs(X-i)<=10) && (abs(Y-j)<=10) )
Image1->Canvas->Pixels[i][j]= (TColor) RGB(ucRed,ucGreen,ucBlue);
}
}
4.畫筆功能(可拖移)
心得: 我是參考 網路上的


5.畫星星
心得: 她其實不難 就把她當2個三角形 來印 2個不同方向的三角形,要注意的就是2個三角形的中點,並不是同一個點,一定要在不同點,不然圖形印出來會重疊!!