【发布时间】: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图像;你有考虑到这一点吗?
-
谢谢!我已将其考虑在内,但只是为了进一步传递价值。我忘了为调试图像更改它,这就是为什么图像线在错误的位置被剪切。作为记录,我的第二个代码示例是我目前正在使用的,它可以很好地完成工作。我会编辑消息。