旋转存储在一维数组中的位图
本文关键字:位图 一维数组 存储 旋转 | 更新日期: 2023-09-27 18:33:17
编辑: 第二个代码示例是正确的答案。我的问题不在位图旋转本身之外,所以第二个代码示例是标题中问题的答案。
我正在尝试旋转存储在 1D 数组 (_pixelData( 中的位图。我似乎无法让它工作。有人可以指出我正确的方向或给出一个示例解决方案。
图像为 320x 240 像素,存储在 1D 数组中(前 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];
x - source。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];
}
这就是答案。这是我最初的问题作为一个例子,但我认为它坏了,但事实证明,实际问题出在位图图像尺寸上,而不是 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];