線形補間法プログラム(C++)
C++言語で線形補間法のプログラムを組んで実行しているのですが、どしてもうまくいきません。ただ2倍の画像を作っているだけなのですが・・・。
以下プログラムを載せます、おおよその場所はわかるのですがどうすれば通るのかわかりません。どう直したらよいのか分かる方がいましたらご教授お願いします。
※bmp[0]:現画像 pic:bmp[0]の縦横2倍の画像
// 線形補間法 //
int zx = 2;
int zy = 2;
int i,j,m,n;
float x,y,p,q;
int xs = bmp[0]->Width/2;
int ys = bmp[0]->Height/2;
int d;
for(i = -ys; i < ys; i++){
for(j = -xs; j < xs; j++){
y = i/zy;
x = j/zx;
if(y > 0){
m = (int)y;
}else{
m = (int)(y-1);}
if(x > 0){
n = (int)x;
}else{
n = (int)(x-1);}
q = y - m;
p = x - n;
if(q == 1){q = 0; m = m + 1;}
if(p == 1){p = 0; n = n + 1;}
if((m >= -ys)&&(m < ys)&&(n >= -xs)&&(n < xs)){
d = (int)((1.0 - q) * (1.0 - p) * (bmp[0]->GetPixel( m + ys, n + xs)) //おそらくこの辺に問題があるかと思われます。
+ p * (bmp[0]->GetPixel( m +ys, n + xs))
+ q * (1.0 - p) * (bmp[0]->GetPixel(m + 1 + ys, n + xs))
+ p * (bmp[0]->GetPixel(m + 1 + ys, n + 1 + xs)));
}else{
d = 0;
}
if(d < 0){d = 0;}
if(d > 255){d = 255;}
pic->SetPixel(i + ys, j + xs) = d;
}
}
pictureBox2->Image = pic;
}
お礼
このような検索方法があるのですね。 ありがとうございます。