我正在开发一个 C# 程序来处理图像(作为 int[,] 给出)..
我有一个二维像素数组,我需要围绕一个点旋转它们,然后按比例缩小它们以适合原始数组。我已经找到了关于使用矩阵变换到一个点并旋转然后变换回来的文章。剩下的就是缩放生成的图像以适应原始大小的数组。
那怎么办?(最好有两个方程,一个用于 x ,一个用于 y )
我正在开发一个 C# 程序来处理图像(作为 int[,] 给出)..
我有一个二维像素数组,我需要围绕一个点旋转它们,然后按比例缩小它们以适合原始数组。我已经找到了关于使用矩阵变换到一个点并旋转然后变换回来的文章。剩下的就是缩放生成的图像以适应原始大小的数组。
那怎么办?(最好有两个方程,一个用于 x ,一个用于 y )
看看这里。这应该为您提供坐标旋转背后的所有数学知识。
您需要找到从结果数组到原始图像的转换。然后,您将目标中的点转换为源图像中的点并进行复制。通过过采样进行抗锯齿也是一种选择。您的旋转矩阵也可以应用缩放 - 只需将矩阵乘以比例因子(假设为 2x2)。如果您使用 3x3 矩阵进行旋转、缩放和平移,则只需将左上角的 2x2 乘以比例因子。
最后,冒着谦虚的风险,这里是我为进行全屏旋转缩放而编写的一些旧 TP6/asm DOS 代码的链接。奇怪的东西留在网上: http ://www.hornet.org/cgi-bin/scene-search.cgi?search=Paul%20H.%20Kahler
您需要做的所有事情都可以通过Bitmap
GDI+ 中的图像来完成(使用System.Drawing...
命名空间)。这些类的设计和优化正是为了完成这类事情(图像处理)。是否有任何特殊原因您不能使用实际Bitmap
而不是int[,]
?你甚至可以编写一个非常简单的例程来创建一个Bitmap
from an int[,]
,在 上做任何你需要做的事情Bitmap
,然后int[,]
在最后将它转换回。