2D像素阵列旋转和缩放

时间:2009-12-24 13:21:33

标签: c# image matrix rotation image-scaling

我正在开发一个C#程序来处理图像(以int [,]为单位)..

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

怎么做? (最好用2个方程,一个用于x,一个用于y)

4 个答案:

答案 0 :(得分:2)

Matrix 课程中,您有两个函数 Rotate (At)和 Scale 。你会发现还有什么?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您需要做的一切都可以使用GDI +中的Bitmap图像(使用System.Drawing...命名空间)完成。这些类的设计和优化正是为了做这种事情(图像处理)。您是否有任何特殊原因无法使用实际Bitmap代替int[,]?您甚至可以编写一个非常简单的例程来从Bitmap创建int[,],在Bitmap上执行您需要的操作,然后将其转换回int[,] at结束。