我正在尝试将 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);
}
}
最佳答案
我将只关注交换功能:
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
}
关于performance - 快速将 RGBA 转换为 ARGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259391/