RowRotated[i] := RowOriginal[iOriginal]
END
ELSE BEGIN
RowRotated[i].rgbtBlue := 255; // assign "corner" color
RowRotated[i].rgbtGreen := 0;
RowRotated[i].rgbtRed := 0
END
END
END
END {RotateBitmapMethod1};
在这个程序的原始版本中,我花了很大的力气来用像素的中心来定义像素的位置。METHOD 2 中使用(i+0.5,j+0.5)的位置作为像素(i,j)的位置,然后用上面“相反”的方法来查找。METHOD 3 就像 METHOD 2一样,但是却试图使用了共多的整数来计算。假如你对坐标(i+0.5,j+0,5)乘以2,你就可以在(2i+1,2j+1)的空间上工作。METHOD 3很有效但要比METHOD 2复杂——很不幸,它却是程序必须涉及到的部分。这一点会让人糊涂,所以我重做了这个实验来表示“简单”的方法。时间的不同并不能作为METHOD 1-3之间的显著差别。
24位色的位图的旋转会有一些不显著的变化,如果是一般的图片你或许就无法分辨出来,但是如果是边和线条分明的图像,你就会察觉了。为了减少这样的改变,我们加入了一个双线形的部分来提高现在的算法,这样可以获得比较接近的像素点(但这也会更慢)。
想要获得旋转位图的更好的方法(会更慢的),你可以看看“高速旋转图像,”在计算机显示,图像和图像处理方面。"High Accuracy Rotation of Images," in Computer Vision, Graphics and Image Processing, Vol.54, No. 4, July 1992, pp.340-344.
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/