我有一个byte[]
用于RGBA阵列。我有以下方法可以垂直翻转图像:
private byte[] FlipPixelsVertically(byte[] frameData, int height, int width)
{
byte[] data = new byte[frameData.Length];
int k = 0;
for (int j = height - 1; j >= 0 && k < height; j--)
{
for (int i = 0; i < width * 4; i++)
{
data[k * width * 4 + i] = frameData[j * width * 4 + i];
}
k++;
}
return data;
}
我创建new byte[]
的原因是因为我不想更改frameData
的内容,因为原始信息将在其他地方使用。因此,现在,我只有一个嵌套的for循环,它将字节复制到data
中的适当位置。
随着height
和width
的增加,这将成为昂贵的操作。我该如何优化它以便复制/交换更快?
答案 0 :(得分:1)
private byte[] FlipPixelsVertically(byte[] frameData, int height, int width)
{
byte[] data = new byte[frameData.Length];
int k = 0;
for (int k = 0; k < height; k++)
{
int j = height - k - 1;
Buffer.BlockCopy(
frameData, k * width * 4,
data, j * width * 4,
width*4);
}
return data;
}