【问题标题】:C - Rotate a image by 90 degree (right and left) using one array - bitmap [closed]C - 使用一个数组将图像旋转 90 度(左右) - 位图 [关闭]
【发布时间】:2017-03-16 14:42:54
【问题描述】:

如何将图像旋转 90 度(左右)一维数组 n 元素?

我的数组是 24 位位图 (NxN)

比如我的数组

A[16] = {
1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16}

旋转到新数组:

{4,8,12,16
3,7,11,15
2,6,10,14
1,5,9,13}

到:

{13,9,5,1,
14,10,6,2,
15,11,7,3,
16,12,8,4}

【问题讨论】:

  • 你试过什么?你能弄清楚A[0][0] 中的值应该在哪里结束吗?如果您将A[0][0] 与该单元格交换会发生什么?接下来需要换什么?
  • 您需要将源数组的列复制到目标数组的行,或者将源数组的行复制到目标数组的列。唯一的问题是你做事情的顺序。首先编写一个传递源和目标数组及其大小的骨架函数。然后仔细考虑如何将行复制到列中。
  • 你有一个从 2D 像素坐标到 1D 数组索引的映射。把它写成坐标的函数。有了这个,你也应该能够写出一个反函数。您还有两个从 2D 坐标到旋转的 2D 坐标的映射——也可以将它们写成函数。您想要的转换只是(1D -> 2D),(2D旋转),(2D -> 1D)的组合;您已经为所有这些都提供了封闭式公式,因此您应该能够为整体转换编写表达式。
  • edit您的问题显示what you have tried so far。您应该至少包含您遇到问题的代码的大纲(但最好是minimal reproducible example),然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask

标签: c algorithm bitmap rotation


【解决方案1】:

您可以使用rotation matrix。 90度的旋转矩阵很简单

  [0 -1
  1  0]

here 如果需要,您可以查看如何在 c 中进行矩阵乘法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多