// Image是传入的4×4的点的象素值
// 返回插值点的象素值
unsigned char SplineInter(unsigned char Image[4][4], float X, float Y)
{
double Colomn[4]; // 每一列的插值结果
double A0, A1, A2,A3; // 四个插值系数
double X0, X1, Y0, Y1;
int i; if (X == 0.0 && Y == 0.0)
return Image[1][1];
if (X == 0.0)
for (i = 0; i<4; i++)
Colomn[i] = (double) Image[i][1];
else
{
X1 = X + 1.0;
X0 = 1.0 - X; A0 = ((-0.166667 * X1 + 1.0) * X1 - 2.0) * X1 + 1.333333;
A1 = (0.5 * X - 1.0) * X * X + 0.666667;
A2 = (0.5 * X0 - 1.0) * X0 * X0 + 0.666667;
A3 = 1.0 - A0 - A1 -A2; if (Y == 0.0)
return (unsigned char) (A0 * Image[1][0] + A1 * Image[1][1] + A2 * Image[1][2] + A3 * Image[1][3]); for (i = 0; i < 4; i++)
{
Colomn[i] = A0 * Image[i][0] + A1 * Image[i][1] + A2 * Image[i][2] + A3 * Image[i][3];
}
} Y1 = Y + 1.0;
Y0 = 1.0 - Y;
A0 = ((-0.166667 * Y1 + 1.0) * Y1 - 2.0) * Y1 + 1.333333;
A1 = (0.5 * Y - 1.0) * Y * Y + 0.666667;
A2 = (0.5 * Y0 - 1.0) * Y0 * Y0 + 0.666667;
A3 = 1.0 - A0 - A1 -A2;
double Pixel = Colomn[0] * A0 + Colomn[1] * A1 + Colomn[2] * A2 + Colomn[3] * A3;
return (unsigned char)Pixel;
}
// 返回插值点的象素值
unsigned char SplineInter(unsigned char Image[4][4], float X, float Y)
{
double Colomn[4]; // 每一列的插值结果
double A0, A1, A2,A3; // 四个插值系数
double X0, X1, Y0, Y1;
int i; if (X == 0.0 && Y == 0.0)
return Image[1][1];
if (X == 0.0)
for (i = 0; i<4; i++)
Colomn[i] = (double) Image[i][1];
else
{
X1 = X + 1.0;
X0 = 1.0 - X; A0 = ((-0.166667 * X1 + 1.0) * X1 - 2.0) * X1 + 1.333333;
A1 = (0.5 * X - 1.0) * X * X + 0.666667;
A2 = (0.5 * X0 - 1.0) * X0 * X0 + 0.666667;
A3 = 1.0 - A0 - A1 -A2; if (Y == 0.0)
return (unsigned char) (A0 * Image[1][0] + A1 * Image[1][1] + A2 * Image[1][2] + A3 * Image[1][3]); for (i = 0; i < 4; i++)
{
Colomn[i] = A0 * Image[i][0] + A1 * Image[i][1] + A2 * Image[i][2] + A3 * Image[i][3];
}
} Y1 = Y + 1.0;
Y0 = 1.0 - Y;
A0 = ((-0.166667 * Y1 + 1.0) * Y1 - 2.0) * Y1 + 1.333333;
A1 = (0.5 * Y - 1.0) * Y * Y + 0.666667;
A2 = (0.5 * Y0 - 1.0) * Y0 * Y0 + 0.666667;
A3 = 1.0 - A0 - A1 -A2;
double Pixel = Colomn[0] * A0 + Colomn[1] * A1 + Colomn[2] * A2 + Colomn[3] * A3;
return (unsigned char)Pixel;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货