double pos;
short* RowOffset = (short*)malloc(NewWidth * sizeof(short));
short* RowPartXX = (short*)malloc(NewWidth * sizeof(short));

for (int X = 0; X < NewWidth; X++)
{
  pos = (double)X * (Width - 1) / (double)NewWidth;
  RowOffset[X] = pos;
  RowPartXX[X] = (pos - (int)pos) * 2048;
}
for (int Y = 0; Y < NewHeight; Y++)
{
  unsigned char* LinearDest = Dest + Y * NewWidth;
  pos = Y * (Height - 1) / NewHeight;
  int PartYY = (pos - (int)pos) * 2048;
  int InvertYY = 2048 - PartYY;
  int ColOffset = int(pos);
  unsigned char* LinearSrc = Src + ColOffset * Width;
  unsigned char* LinearSrc1 = Src + (ColOffset + 1) * Width;
  for (int X = 0; X < NewWidth - 1; X++)
  {
    int PartXX = RowPartXX[X];
    int InvertXX = 2048 - PartXX;
    LinearDest[X] = ((LinearSrc[RowOffset[X]] * InvertXX +
      LinearSrc[RowOffset[X + 1]] * PartXX) * InvertYY +
      (LinearSrc1[RowOffset[X]] * InvertXX +
        LinearSrc1[RowOffset[X + 1]] * PartXX) * PartYY) >> 22;
  }
}



free(RowOffset);
free(RowPartXX);

 

作者 admin

发表评论

您的电子邮箱地址不会被公开。