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

沒有留言: