為什麼這段線性內插法的程式碼 , 空間不會爆 |
答題得分者是:istillloving
|
kobebryant81
一般會員 發表:15 回覆:15 積分:6 註冊:2007-05-08 發送簡訊給我 |
各位好 , 我參考了jerryKuo版主發表的作品
http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=34733 擷取裡頭這段程式碼 [code cpp] dX = (double)w/(double)newW; dY = (double)h/(double)newH; for(j = 0 ; j < newH ; j ) for(i =0 ; i < newW ; i ) { x = dX*(double)i; y = dY*(double)j; ix = (int)x; iy = (int)y; fx = x - (float)ix; fy = y - (float)iy; nclr1 = GetRValue(Bmp->Canvas->Pixels[ix][iy]); nclr2 = GetRValue(Bmp->Canvas->Pixels[ix 1][iy]); nclr3 = GetRValue(Bmp->Canvas->Pixels[ix][iy 1]); nclr4 = GetRValue(Bmp->Canvas->Pixels[ix 1][iy 1]); // Bilinear clrR=(byte)((1.0-fx)*(1.0-fy)*(double)nclr1 (fx)*(1.0-fy)*(double)nclr2 (1.0-fx)* (fy)*(double)nclr3 (fx)* (fy)*(double)nclr4); } [/code] 假設 原始 寬高為5 , 放大2倍後 newW=10 , newH =10, 當 i 與 j 等於 newW-1 , newH-1時 , ix = 4 , iy=4 此時 執時此行 nclr2 = GetRValue(Bmp->Canvas->Pixels[ix 1][iy]); ix 1=5 照理說空間不就爆了, 最多只到Bmp->Canvas->Pixels[4][4] (5*5影像) ... 但我執行卻不會出錯 只是放大後的圖在最右邊和最下面兩行的像素值不知讀到哪裡的值 , 會出現其他像素值 我很好奇為什麼空間不會爆呢?? 謝謝解答 編輯記錄
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
說真的
我也是用這個雙線性內插 但是不是不爆 是不到重要關頭他才不爆 所以還是乖乖加上判斷式吧 [code cpp] /**** 雙線性內插 ****/ dX = (double)ww/(double)newW; dY = (double)hh/(double)newH; for(j = 0 ; j < newH ; j ) { for(i =0 ; i < newW ; i ) { XX = dX*(double)i; YY = dY*(double)j; ix = (int)XX; iy = (int)YY; fx = XX - (double)ix; fy = YY - (double)iy; // Bilinear 加上邊界判斷式 if( (ix else if( (ix>=ww)&&(iy else if( (ix nclr1 = NBmp[ix ww*(hh-1)]; else nclr1 = NBmp[ww-1 ww*(hh-1)]; if( (ix 1 else if( (ix 1>=ww)&&(iy else if( (ix 1 nclr2 = NBmp[ix 1 ww*(hh-1)]; else nclr2 = NBmp[ww-1 ww*(hh-1)]; if( (ix else if( (ix>=ww)&&(iy 1 else if( (ix nclr3 = NBmp[ix ww*(hh-1)]; else nclr3 = NBmp[ww-1 ww*(hh-1)]; if( (ix 1 else if( (ix 1>=ww)&&(iy 1 else if( (ix 1 nclr4 = NBmp[ww-1 ww*(hh-1)]; else nclr4 = NBmp[ww-1 ww*(hh-1)]; clr=(double)((1-fy)*((1-fx)*nclr1 fx*nclr2) fy*((1-fx)*nclr3 fx*nclr4)); RBmp[i newW*j] =((clr)>WBN)?255.0:0.0; } } /**** 雙線性內插 **END**/ [/code] ===================引 用 kobebryant81 文 章=================== 各位好 , 我參考了jerryKuo版主發表的作品 http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=34733 擷取裡頭這段程式碼 [code cpp] dX = (double)w/(double)newW; dY = (double)h/(double)newH; for(j = 0 ; j < newH ; j ) for(i =0 ; i < newW ; i ) { x = dX*(double)i; y = dY*(double)j; ix = (int)x; iy = (int)y; fx = x - (float)ix; fy = y - (float)iy; nclr1 = GetRValue(Bmp->Canvas->Pixels[ix][iy]); nclr2 = GetRValue(Bmp->Canvas->Pixels[ix 1][iy]); nclr3 = GetRValue(Bmp->Canvas->Pixels[ix][iy 1]); nclr4 = GetRValue(Bmp->Canvas->Pixels[ix 1][iy 1]); // Bilinear clrR=(byte)((1.0-fx)*(1.0-fy)*(double)nclr1 (fx)*(1.0-fy)*(double)nclr2 (1.0-fx)* (fy)*(double)nclr3 (fx)* (fy)*(double)nclr4); } [/code] 假設 原始 寬高為5 , 放大2倍後 newW=10 , newH =10, 當 i 與 j 等於 newW-1 , newH-1時 , ix = 4 , iy=4 此時 執時此行 nclr2 = GetRValue(Bmp->Canvas->Pixels[ix 1][iy]); ix 1=5 照理說空間不就爆了, 最多只到Bmp->Canvas->Pixels[4][4] (5*5影像) ... 但我執行卻不會出錯 只是放大後的圖在最右邊和最下面兩行的像素值不知讀到哪裡的值 , 會出現其他像素值 我很好奇為什麼空間不會爆呢?? 謝謝解答
------
恩... |
kobebryant81
一般會員 發表:15 回覆:15 積分:6 註冊:2007-05-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |