垂直翻转RGBA图像的快速/优化方式



我有一个RGBA数组的byte[]。我有以下方法垂直翻转图像:

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中的适当位置。

随着heightwidth的增加,这将成为一种昂贵的操作。如何对此进行优化,以便更快地进行复制/交换?

使用缓冲区。区块复制:

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;
}

最新更新