【问题标题】:2D pixel array rotation and scaling2D 像素阵列旋转和缩放
【发布时间】:2009-12-24 13:21:33
【问题描述】:

我正在开发一个 C# 程序来处理图像(以 int[,] 形式给出)..

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

如何做到这一点? (最好有 2 个方程,一个用于 x,一个用于 y)

【问题讨论】:

    标签: c# image matrix rotation image-scaling


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      看看here。这应该为您提供坐标旋转背后的所有数学知识。

      【讨论】:

      • 如果他不想让他的图像看起来一团糟,他将需要一个好的插值算法
      • 是的,尽管他也有兴趣对旋转后的图像进行缩放——这将处理其中的插值部分。
      【解决方案3】:

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

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

      【讨论】:

      • +1 您在 rotozoomer 中选择的有趣方法(自述文件中提到了您的方法 4)。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        相关资源
        最近更新 更多