/* 以下の変数は, #defineでの置換などを仮定している. RE: 解像度調節用画素間隔(通常はRE=1) X0: xの始点 Y0: yの始点 MAXU: 出力画像の横幅(ピクセル数) MAXV: 出力画像の縦幅(ライン数) WIDTH: 入力画像の横幅(ピクセル数) A[3], B[3]: 別途推定したパラメータ (Corrected, 2004-01-13) */ double x, y, u, v, q, r, s; int uu, vv, qq, p[2][2]; unsigned char cc; FILE *fpr, *fpw; for (j = 0; j < MAXV; j++) { y = j*RE + Y0; for (i = 0; i < MAXU; i++) { x = i*RE + Y0; u = 0.0; v = 0.0; u=A[0]+A[1]*x+A[2]*y; v=B[0]+B[1]*x+B[2]*y; uu = u; /* (整数 <-- 倍精度) */ vv = v; fseek(fpr,WIDTH*vv+uu,0); /* pの周囲4点を取る */ cc=fgetc(fpr); p[0][1]=cc; /* (整数 <-- 文字) */ cc=fgetc(fpr); p[1][1]=cc; fseek(fpr,WIDTH-2,1); cc=fgetc(fpr); p[0][0]=cc; cc=fgetc(fpr); p[1][0]=cc; q = 0.0; /* 共一次内挿 */ r = u - uu; s = v - vv; q = (1.0-r)*(1.0-s)*p[0][0] + r*(1.0-s) *p[0][1] + (1.0-r)*s *p[1][0] + r*s *p[1][1] ; qq = q; /* (整数 <-- 倍精度) */ if (qq > 255) qq = 255; if (qq < 0 ) qq = 0; fputc(qq,fpw); /* (整数を文字型で出力) */ } }