【问题标题】:Rotate a bitmap stored in a 1D array旋转存储在一维数组中的位图
【发布时间】:2014-12-05 12:55:53
【问题描述】:

编辑: 第二个代码示例是正确答案。我的问题不在位图旋转本身,所以第二个代码示例是标题中问题的答案。

我正在尝试旋转存储在一维数组 (_pixelData) 中的位图。我似乎无法让它工作。有人可以指出我正确的方向或给出一个示例解决方案。

图像为 320 x 240 像素并存储在一维数组中(前 320 个值表示位图中的第一行,下一个 320 表示下一行,依此类推)。

我不想将它写入可写位图,将其旋转到那里并将其转换为 int 数组。我想操作int数组。这样做的原因是源来自相机作为 ARGB 数据,我想保持简单。

这是我得到的(不起作用。结果是垂直线不相交的损坏图像)

// Rotate the data for Portait Mode
            int height = 320;
            int width = 240;
            int[] _pixelDataRotated = new int[width* height];
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                    _pixelDataRotated[x * height + height - y - 1] = _pixelData[x + y * width];
            }

这就是我的做法,它也适用于轮换。 这就是答案。

    for (int x = 0; x < width; x++)
      for (int y = 0; y < height; y++)
         _pixelDataRotated[y + x * height] = _pixelData[x + y * width];

【问题讨论】:

  • 你能提供一个例子(源结果)吗? “轮换”有很多含义。
  • @ScottHunter 忘了补充一下,我正在尝试将它旋转 90 度(完全正确)。
  • 旋转320x240图像时,变成240x320图像;你有考虑到这一点吗?
  • 谢谢!我已将其考虑在内,但只是为了进一步传递价值。我忘了为调试图像更改它,这就是为什么图像线在错误的位置被剪切。作为记录,我的第二个代码示例是我目前正在使用的,它可以很好地完成工作。我会编辑消息。

标签: c# arrays bitmap


【解决方案1】:

x - 来源。 y - 旋转;

        var x = new[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        var y = new int[12];
        var width = 4;
        var height = 3;

        for (var i = 0; i < width; i++)
            for (var j = 0; j < height; j++)
            {
                y[i * height + j] = x[j * width + i];
            }

【讨论】:

    【解决方案2】:

    这就是答案。以我最初的问题为例,但我认为它已损坏,但事实证明实际问题出在位图图像尺寸上,而不是 90 度旋转算法本身。

    // _pixelData is the source array _pixelDataRotated the target array
    for (int x = 0; x < width; x++)
      for (int y = 0; y < height; y++)
         _pixelDataRotated[y + x * height] = _pixelData[x + y * width];
    

    【讨论】:

    • 当您为您运行此代码两次时会发生什么?对我来说,它只是将图片翻转回来,而不是再旋转 90 度。
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多