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

时间:2018-12-06 22:43:15

标签: c# optimization

我有一个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中的适当位置。

随着heightwidth的增加,这将成为昂贵的操作。我该如何优化它以便复制/交换更快?

1 个答案:

答案 0 :(得分:1)

使用Buffer.BlockCopy

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