快速将 RGBA 转换为 ARGB

Per*_*abs 7 performance argb rgba

我正在尝试将 rgba 缓冲区转换为 argb,是否有任何方法可以改进下一个算法,或者任何其他更快的方法来执行此类操作?考虑到 alpha 值在 argb 缓冲区中一次并不重要,并且应始终以 0xFF 结束。

int y, x, pixel;

for (y = 0; y < height; y++)
{
    for (x = 0; x < width; x++)
    {
     pixel = rgbaBuffer[y * width + x];
     argbBuffer[(height - y - 1) * width + x] = (pixel & 0xff00ff00) | ((pixel << 16) & 0x00ff0000) | ((pixel >> 16) & 0xff);
    }
}
Run Code Online (Sandbox Code Playgroud)

Enr*_*oud 7

我将只关注交换功能:

typedef unsigned int Color32;

inline Color32 Color32Reverse(Color32 x)
{

    return
    // Source is in format: 0xAARRGGBB
        ((x & 0xFF000000) >> 24) | //______AA
        ((x & 0x00FF0000) >>  8) | //____RR__
        ((x & 0x0000FF00) <<  8) | //__GG____
        ((x & 0x000000FF) << 24);  //BB______
    // Return value is in format:  0xBBGGRRAA
}
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于 RGBA 到 ARGB,而不是 ARGB 到 BGRA。 (2认同)