新手問?..圖片縮小的問題 |
答題得分者是:taishyang
|
wd7142
一般會員 發表:18 回覆:19 積分:7 註冊:2004-01-13 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
wd7142
一般會員 發表:18 回覆:19 積分:7 註冊:2004-01-13 發送簡訊給我 |
引言: wd7142您好:引言:所以想請問一下他的迴圈方面怎麼寫會比較好?您可以PO上您的程式碼,讓有經驗的前輩幫您看看 >>< face="Verdana, Arial, Helvetica"> int x,y; unsigned char clr[256][256]; int i,j; unsigned char pixel1,pixel2,pixel3,pixel4; for(i = 0 ; i < 511 ; j =2) for(j =0 ; j < 511 ; i =2) { x = i /2; y = j /2; pixel1 = GetRValue(Image1->Canvas->Pixels[i][j]); pixel2 = GetRValue(Image1->Canvas->Pixels[i 1][j]); pixel3 = GetRValue(Image1->Canvas->Pixels[i][j 1]); pixel4 = GetRValue(Image1->Canvas->Pixels[i 1][j 1]); clr[x][y] =(pixel1 pixel2 pixel3 pixel4)/4; } 我想我應該是出錯在pixels值寫回的部份,麻煩請指教!! |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
wd7142您好:
試試下面的code
unsigned char clr[256][256]={0}; unsigned char pixel1,pixel2,pixel3,pixel4; for(int y=0; y<512; y =2) for(int x=0; x<512; x =2) { int x1 = x/2; int y1 = y/2; pixel1 = GetRValue(Image1->Canvas->Pixels[x][y]); pixel2 = GetRValue(Image1->Canvas->Pixels[x 1][y]); pixel3 = GetRValue(Image1->Canvas->Pixels[x][y 1]); pixel4 = GetRValue(Image1->Canvas->Pixels[x 1][y 1]); clr[x1][y1] =(pixel1 pixel2 pixel3 pixel4)/4; } for (int y=0; y<256;y ) { for (int x=0; x<256; x ) { Image2->Canvas->Pixels[x][y]=TColor(RGB(clr[x][y],clr[x][y],clr[x][y])); //Application->ProcessMessages(); } }P.S:PO程式碼的方式請參考版規 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46591 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 - |
wd7142
一般會員 發表:18 回覆:19 積分:7 註冊:2004-01-13 發送簡訊給我 |
引言: wd7142您好: 試試下面的codeunsigned char clr[256][256]={0}; unsigned char pixel1,pixel2,pixel3,pixel4; for(int y=0; y<512; y =2) for(int x=0; x<512; x =2) { int x1 = x/2; int y1 = y/2; pixel1 = GetRValue(Image1->Canvas->Pixels[x][y]); pixel2 = GetRValue(Image1->Canvas->Pixels[x 1][y]); pixel3 = GetRValue(Image1->Canvas->Pixels[x][y 1]); pixel4 = GetRValue(Image1->Canvas->Pixels[x 1][y 1]); clr[x1][y1] =(pixel1 pixel2 pixel3 pixel4)/4; } for (int y=0; y<256;y ) { for (int x=0; x<256; x ) { Image2->Canvas->Pixels[x][y]=TColor(RGB(clr[x][y],clr[x][y],clr[x][y])); //Application->ProcessMessages(); } }P.S:PO程式碼的方式請參考版規 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46591 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 - >>< face="Verdana, Arial, Helvetica"> 真是太謝謝版大了,雖然我知道錯在那,可是卻改不了,所以功力要在多磨練 磨練了。 |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: [quote] int x,y; unsigned char clr[256][256]; int i,j; unsigned char pixel1,pixel2,pixel3,pixel4; for(i = 0 ; i < 511 ; j =2) for(j =0 ; j < 511 ; i =2) { x = i /2; y = j /2; pixel1 = GetRValue(Image1->Canvas->Pixels[i][j]); pixel2 = GetRValue(Image1->Canvas->Pixels[i 1][j]); pixel3 = GetRValue(Image1->Canvas->Pixels[i][j 1]); pixel4 = GetRValue(Image1->Canvas->Pixels[i 1][j 1]); clr[x][y] =(pixel1 pixel2 pixel3 pixel4)/4; } 我想我應該是出錯在pixels值寫回的部份,麻煩請指教!!有一個地方會錯,unsigned char的值域為0~255,pixel1~pixel4四個值相加 最多也是255,所以clr[x][y]所得到值只有0~64而已.這個地方要注意一下 clr[x][y] =(unsigned char)(((int)pixel1 (int)pixel2 (int)pixel3 (int)pixel4)/4); |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |