Image?->Picture->Bitmap->PixelFormat=pf24bit;
(可以預防讀圖時出現問題)
Image?->Picture->Bitmap->Width=ImageWidth;
Image?->Picture->Bitmap->Height=ImageHeight;
↑要指定Bitmap大小,使用ScanLine才不會出錯
2007年3月21日 星期三
Week3 ScanLine
本週的課題是寫出一個類似PhotoImpact仿製功能
呃,因為我在動態配置空間方面還頗弱的
加上資料結構不學好.....
在ScanLine的部份,呈現被ScanLine玩弄的狀態orz
是有一些想法,但是光是在圖片讀取就卡住,
所以有點打算改用Pixels或是Rect來寫這個程式。
等到有新進展後會繼續修改這篇文章~
呃,因為我在動態配置空間方面還頗弱的
加上資料結構不學好.....
在ScanLine的部份,呈現被ScanLine玩弄的狀態orz
是有一些想法,但是光是在圖片讀取就卡住,
所以有點打算改用Pixels或是Rect來寫這個程式。
等到有新進展後會繼續修改這篇文章~
2007年3月14日 星期三
Week2@2007.03.08
暨倉庫番問答之後,本週的課題是變臉。
黃老師教我們使用PhotoImpact11將兩位(以上)同學的臉互相更換。這個課題一共用到了下列功能:
1.套索
2.柔邊
3.放大放小
4.水平翻轉
5.選轉N度
6.亮度增減
根據上面用到個功能,老師出了四個程式讓同學當回家作業....
1.水平翻轉(我想順便來個垂直)
2.套索
3.大小
4.旋轉
post這篇blog的當下,是完成了水平(垂直)翻轉的功能
[程式解釋]
1.設定存取資料用的陣列
int temp[800][800][3]; //圖片最大可存到800*800
2.讀取資料存進陣列中
int i,j;
for ( i=0 ; i<>Width ; i++)
{
for( j=0 ; j<>Height ; j++)
{
temp[i][j][0]=GetRValue(Image1->Canvas->Pixels[i][j]);//該Pixel的R
temp[i][j][1]=GetGValue(Image1->Canvas->Pixels[i][j]);//G
temp[i][j][2]=GetBValue(Image1->Canvas->Pixels[i][j]);//B
}
}
3.翻轉時的程式
---[水平翻轉]---
x=Image1->Width; //x取Image的寬
y=Image1->Height;//取長
for ( i=0 ; iWidth ; i++)
{
for( j=0 ; j<>Height ; j++)
{
Image1->Canvas->Pixels[i][j]=(TColor)RGB(temp[x-i][j][0],temp[x-i][j][1],temp[x-i][j][2]);
} //這邊是水平翻轉
}
---[垂直翻轉]---
x=Image1->Width;
y=Image1->Height;
for ( i=0 ; iWidth ; i++)
{
for( j=0 ; j<>Height ; j++)
{
Image1->Canvas->Pixels[i][j]=(TColor)RGB(temp[i][y-j][0],temp[i][y-j][1],temp[i][y-j][2]);
}
}
------------------------------------------------------------------
以下是[放大縮小]。
int x,y;
float score,si;
x=Image1->Width; //取出原圖大小
y=Image1->Height;
score = ScrollBar1->Position; //用ScrollBar控制縮放
si= ( (score-10)/10 )+1; //最大放大到兩倍,最小縮小到0.1倍
Edit1->Text = si;
Image2->Width= si*x; //讓放大縮小的圖再另一張Image顯示
Image2->Height= si*y;
//以下是放大的程式
TRect ResizeRect;
ResizeRect = TRect(0,0,si*x,si*y);
Image2->Canvas->StretchDraw(ResizeRect, Image1->Picture->Bitmap);
黃老師教我們使用PhotoImpact11將兩位(以上)同學的臉互相更換。這個課題一共用到了下列功能:
1.套索
2.柔邊
3.放大放小
4.水平翻轉
5.選轉N度
6.亮度增減
根據上面用到個功能,老師出了四個程式讓同學當回家作業....
1.水平翻轉(我想順便來個垂直)
2.套索
3.大小
4.旋轉
post這篇blog的當下,是完成了水平(垂直)翻轉的功能
[程式解釋]
1.設定存取資料用的陣列
int temp[800][800][3]; //圖片最大可存到800*800
2.讀取資料存進陣列中
int i,j;
for ( i=0 ; i<>Width ; i++)
{
for( j=0 ; j<>Height ; j++)
{
temp[i][j][0]=GetRValue(Image1->Canvas->Pixels[i][j]);//該Pixel的R
temp[i][j][1]=GetGValue(Image1->Canvas->Pixels[i][j]);//G
temp[i][j][2]=GetBValue(Image1->Canvas->Pixels[i][j]);//B
}
}
3.翻轉時的程式
---[水平翻轉]---
x=Image1->Width; //x取Image的寬
y=Image1->Height;//取長
for ( i=0 ; i
{
for( j=0 ; j<>Height ; j++)
{
Image1->Canvas->Pixels[i][j]=(TColor)RGB(temp[x-i][j][0],temp[x-i][j][1],temp[x-i][j][2]);
} //這邊是水平翻轉
}
---[垂直翻轉]---
x=Image1->Width;
y=Image1->Height;
for ( i=0 ; i
{
for( j=0 ; j<>Height ; j++)
{
Image1->Canvas->Pixels[i][j]=(TColor)RGB(temp[i][y-j][0],temp[i][y-j][1],temp[i][y-j][2]);
}
}
------------------------------------------------------------------
以下是[放大縮小]。
int x,y;
float score,si;
x=Image1->Width; //取出原圖大小
y=Image1->Height;
score = ScrollBar1->Position; //用ScrollBar控制縮放
si= ( (score-10)/10 )+1; //最大放大到兩倍,最小縮小到0.1倍
Edit1->Text = si;
Image2->Width= si*x; //讓放大縮小的圖再另一張Image顯示
Image2->Height= si*y;
//以下是放大的程式
TRect ResizeRect;
ResizeRect = TRect(0,0,si*x,si*y);
Image2->Canvas->StretchDraw(ResizeRect, Image1->Picture->Bitmap);
2007年3月5日 星期一
倉庫番鍵盤改寫
本週的作業是把佳玉已經設定好的倉庫番,移動方式從滑鼠控制改成鍵盤亦可操控。
從課本6-2的內容可以發現,其實鍵盤的每個按鈕都有一個特定的代碼,
我使用的是Form1的OnKeyDown,
if (Key == 37) {Copy原本放在←的程式} //不敢亂動程式,怕之後出錯。
if (Key == 38) {Copy原本放在↑的程式}
if (Key == 39) {Copy原本放在→的程式}
if (Key == 40) {Copy原本放在↓的程式}
做到這步後,卻發現一個大問題!!
因為BCB按鈕太貼心了!!設計了可以用Tab移動or用方向鍵選擇按鈕的功能,
導致沒辦法直接使用鍵盤操控貓咪的移動。
在這個階段時,我先把所有按鈕都Enabled(讓按鈕不能使用),
確認可以使用鍵盤操控後才繼續進行下個步驟。
因為總是會用到按鈕(Restart&Game Rule),
=>我不能把按鈕功能全部移除,得想個辦法讓按鈕的Tab功能失效。
我嘗試過TabStop的設定,但是似乎不能用鍵盤讓TabStop。
最後=>根據老師的建議,以及一些想法....
我嘗試讓按鈕在OnMouseMove時Enabled才等於true的狀態,
//↑其實這個有點沒意義
接著在按鈕有關的程式內的最後一行全部加上ButtonX->Enabled=false;
後來終於成功了~~
結論:原來應該直接設定Enabled,而不是在TabStop上打轉
從課本6-2的內容可以發現,其實鍵盤的每個按鈕都有一個特定的代碼,
我使用的是Form1的OnKeyDown,
if (Key == 37) {Copy原本放在←的程式} //不敢亂動程式,怕之後出錯。
if (Key == 38) {Copy原本放在↑的程式}
if (Key == 39) {Copy原本放在→的程式}
if (Key == 40) {Copy原本放在↓的程式}
做到這步後,卻發現一個大問題!!
因為BCB按鈕太貼心了!!設計了可以用Tab移動or用方向鍵選擇按鈕的功能,
導致沒辦法直接使用鍵盤操控貓咪的移動。
在這個階段時,我先把所有按鈕都Enabled(讓按鈕不能使用),
確認可以使用鍵盤操控後才繼續進行下個步驟。
因為總是會用到按鈕(Restart&Game Rule),
=>我不能把按鈕功能全部移除,得想個辦法讓按鈕的Tab功能失效。
我嘗試過TabStop的設定,但是似乎不能用鍵盤讓TabStop。
最後=>根據老師的建議,以及一些想法....
我嘗試讓按鈕在OnMouseMove時Enabled才等於true的狀態,
//↑其實這個有點沒意義
接著在按鈕有關的程式內的最後一行全部加上ButtonX->Enabled=false;
後來終於成功了~~
結論:原來應該直接設定Enabled,而不是在TabStop上打轉
2007年3月1日 星期四
Test
這個Blog是為了互動媒體的課程所設立的...新版的blogger似乎有點不太穩...
Information Hiding Class 請前往
http://ihc-bleach.blogspot.com/
Information Hiding Class 請前往
http://ihc-bleach.blogspot.com/
訂閱:
文章 (Atom)