全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1568
推到 Plurk!
推到 Facebook!

新手問?..圖片縮小的問題

答題得分者是:taishyang
wd7142
一般會員


發表:18
回覆:19
積分:7
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-16 22:32:22 IP:218.163.xxx.xxx 未訂閱
不好意思,請問一下?...我有一個512x512的灰階圖,我想把他縮小為256x256 的圖,但是,不是使用前述的內插法和單純的縮小放大,而是利用 (a[0][0] a[0][1] a[1][0] a[1][1])/4就是把圖四點的pixels值相加後除四, 而得到新的pixel值,然後寫回去,所以想請問一下他的迴圈方面怎麼寫會 比較好?.......謝謝回答!!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-16 22:55:23 IP:140.135.xxx.xxx 未訂閱
wd7142您好:
引言:所以想請問一下他的迴圈方面怎麼寫會比較好?
您可以PO上您的程式碼,讓有經驗的前輩幫您看看
wd7142
一般會員


發表:18
回覆:19
積分:7
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-16 23:11:02 IP:218.163.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-16 23:51:34 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-17 00:20:36 IP:218.163.xxx.xxx 未訂閱
引言: 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 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 - >< face="Verdana, Arial, Helvetica"> 真是太謝謝版大了,雖然我知道錯在那,可是卻改不了,所以功力要在多磨練 磨練了。
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-19 13:53:57 IP:61.230.xxx.xxx 未訂閱
引言: [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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-19 14:11:42 IP:140.135.xxx.xxx 未訂閱
謝謝JerryKuo版主大哥的提醒,對wd7142真是不好意思< > 當初所測試的圖片偏暗所以沒注意到< > 再次說聲抱歉 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
系統時間:2024-05-13 5:37:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!