编辑: 第二个代码示例是正确答案。我的问题不在位图旋转本身,所以第二个代码示例是标题中问题的答案。
我试图旋转存储在1D数组(_pixelData)中的位图。我似乎无法让它发挥作用。有人能指出我正确的方向或给出一个示例解决方案。
图像为320 x 240像素并存储在一维阵列中(前320个值代表位图中的第一行,下一个320代表下一行,依此类推)。
我不想将它写入writeablebitmap,将其旋转并将其转换为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];
答案 0 :(得分:0)
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];
}
答案 1 :(得分:-1)
这就是答案。这是我原来的问题作为一个例子,但我认为它已被打破,但事实证明,实际问题在于位图图像尺寸,而不是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];