// 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;
}