2009-12-24 65 views
0

我上的C#程序来处理图像时(给定为INT [,])..2D像素阵列的旋转和缩放

我有像素的2D阵列,并且我需要围绕一个点旋转它们,然后缩小它们以适应原始数组。我已经找到有关使用矩阵转换为点并旋转然后转换回来的文章。剩下的就是缩放合成图像以适应原始大小的数组。

这怎么办? (优选具有2个方程一个用于x和一个用于Y)

回答

1

看一看here。这应该给你所有的坐标旋转背后的数学。

+0

他需要一个很好的插值算法,虽然如果他不想让他的图像看起来一团糟 – horseyguy

+0

是的,虽然他也有兴趣做旋转图像 - 这将处理它的插值部分。 –

0

您需要做的所有事情都可以在GDI +中使用Bitmap图像完成(使用System.Drawing...名称空间)。这些类是专门为这种事情设计和优化的(图像处理)。是否有任何特殊的原因,你不能使用Bitmap而不是int[,]?你甚至可以编写一个非常简单的例程,从int[,]创建一个Bitmap,根据需要在Bitmap上做任何事情,然后在最后将其转换回int[,]

1

您需要找到从结果数组到原始图像的转换。然后将目标中的点转换为源图像中的点并复制。通过过采样进行抗锯齿也是一种选择。您的旋转矩阵也可以应用比例缩放 - 只需将矩阵乘以比例因子(假定为2x2)。如果您正在为旋转,缩放和平移做3x3矩阵,则只需将左上方的2x2乘以比例因子即可。

最后,冒着一些谦虚的风险,这里是一些旧的TP6/asm DOS代码,这些代码是我为全屏旋转缩放而写的。奇怪的东西,坚持在网上: http://www.hornet.org/cgi-bin/scene-search.cgi?search=Paul%20H.%20Kahler

+0

+1您在rotozoomer中选择的有趣方法(自述文件中提到了您的方法4)。 –