C - RGBA转换不能返回所需的RGB结果

问题描述:

好的,我有一种方法,我在返回所需结果时遇到困难。所以我做了一个测试结果,并且它返回了我不期待的结果。C - RGBA转换不能返回所需的RGB结果

下面是一个例子 - >

int color = 0x00FFFF00; 

return 0xFF & (color >> 24) | 0xFF & (color >> 16) | 0xFF & (color >> 8); 

据我所知,这应该返回:

0x00FFFF 

但是,它实际上返回:

0x0000FF 

可有人请解释发生了什么?我也想知道如何正确地将32位RGBA整数转换为24位RGB整数,谢谢。

+0

在每个移位应用& 0xFF因此只有一个有价值的字节,其他的都是零。 –

+0

我知道。我试图获取RGBA整数内的特定颜色值并将它们转换为RGB整数,但clearlight已经帮助我完成了这个。无论如何,我也看到我在这里做错了什么。我应该移动红色和绿色元素的结果来匹配RGB整数。 – SoleCore

试试这个:

#include <stdio.h> 
int main() { 

     unsigned int x = 0x00FFFF00; 
     printf("0%8.8x", (x >> 8) & 0x00FFFFFF); 
} 

$ cc -o shft shft.c 
$ ./shft 
0x0000ffff 

它的更好,如果你让颜色的unsigned int, 否则你可以得到的符号位从左边转向,但在这种情况下,我们屏蔽掉字节偏移,但要小心。

我也发现我做错了。我没有移位整数的红色和绿色的元素转换为匹配RGB整数--->

int color = 0x00FFFF00; 

// Returns 0x0000FF 
return 0xFF & (color >> 24) | 0xFF & (color >> 16) | 0xFF & (color >> 8); 

这里是固定的代码--->

unsigned int color = 0x00FFFF00; // Unsigned Integer to avoid shifting the Two's Complement flag into the RGB value as clearlight pointed out. 

// Returns 0x00FFFF 
return (0xFF & (color >> 24)) << 16 | (0xFF & (color >> 16)) << 8 | 0xFF & (color >> 8);