C# 二维像素阵列旋转和缩放
我正在开发一个C#程序来处理图像(给定为int[,]) 我有一个2D像素阵列,我需要围绕一个点旋转它们,然后缩小它们以适应原始阵列。我已经找到了关于使用矩阵变换到一个点并旋转然后再变换回来的文章。剩下的就是缩放结果图像以适应原始大小的数组C# 二维像素阵列旋转和缩放,c#,image,matrix,rotation,image-scaling,C#,Image,Matrix,Rotation,Image Scaling,我正在开发一个C#程序来处理图像(给定为int[,]) 我有一个2D像素阵列,我需要围绕一个点旋转它们,然后缩小它们以适应原始阵列。我已经找到了关于使用矩阵变换到一个点并旋转然后再变换回来的文章。剩下的就是缩放结果图像以适应原始大小的数组 如何做到这一点?(最好使用两个等式,一个用于x,一个用于y)在类中,您有两个函数(At)和。你还会发现什么呢?在类中,你有(At)和。你还会发现什么呢?看看。这将为您提供坐标旋转背后的所有数学知识。看一看。这将为您提供进行坐标旋转所需的所有数学知识。您需要做的
如何做到这一点?(最好使用两个等式,一个用于x,一个用于y)在类中,您有两个函数(At)和。你还会发现什么呢?在类中,你有(At)和。你还会发现什么呢?看看。这将为您提供坐标旋转背后的所有数学知识。看一看。这将为您提供进行坐标旋转所需的所有数学知识。您需要做的所有事情都可以通过GDI+中的
Bitmap
图像来完成(使用System.Drawing…
名称空间)。这些类的设计和优化正是为了做这类事情(图像处理)。是否有任何特殊原因使您无法使用实际的位图而不是int[,]
?您甚至可以编写一个非常简单的例程,从int[,]
创建Bitmap
,在Bitmap
上执行任何需要的操作,然后在最后将其转换回int[,]
。所有需要执行的操作都可以使用GDI+中的Bitmap
图像完成(使用System.Drawing…
名称空间)。这些类的设计和优化正是为了做这类事情(图像处理)。有什么特别的原因不能使用实际的位图而不是int[,]
?您甚至可以编写一个非常简单的例程,从int[,]创建位图
,在位图上执行任何需要的操作,然后将其转换回int[,]
结尾。您需要找到从结果数组到原始图像的变换。然后将目标中的点变换为源图像中的点并进行复制。通过过采样消除混叠也是一个选项。旋转矩阵也可以应用缩放-只需将矩阵乘以缩放因子即可(假设为2x2)。如果要进行3x3矩阵旋转、缩放和平移,则只需将左上角2x2乘以比例因子即可
最后,冒着谦逊的风险,这里有一个链接,指向我为进行全屏旋转缩放而编写的一些旧TP6/asm DOS代码。奇怪的是,网络上到处都是这样的东西:
您需要找到从结果数组到原始图像的变换。然后将目标中的点变换为源图像中的点并进行复制。通过过采样消除混叠也是一个选项。旋转矩阵也可以应用缩放-只需将矩阵乘以缩放因子(假设为2x2).如果你在做3x3矩阵的旋转、缩放和平移,那么只需将左上角2x2乘以比例因子即可
最后,冒着谦逊的风险,这里有一个链接,指向我为进行全屏旋转缩放而编写的一些旧TP6/asm DOS代码。奇怪的是,网络上到处都是这样的东西:
如果他不想让自己的图像看起来像MesseYes,他需要一个好的插值算法,尽管他也对旋转图像的缩放感兴趣——这将解决其中的插值部分。如果他不想让自己的图像看起来像MesseYes,他需要一个好的插值算法,尽管他也感兴趣在旋转图像上进行缩放时——这将处理图像的插值部分。+1您在rotozoomer中选择的有趣方法(自述文件中提到的第4种方法)。+1您在rotozoomer中选择的有趣方法(自述文件中提到的第4种方法)。