C-RGBA转换未返回所需的RGB结果
好的,我有一个方法,我很难返回期望的结果。所以我做了一个测试结果,它返回了一个我没有预料到的结果 下面是一个例子->C-RGBA转换未返回所需的RGB结果,c,gcc,rgb,data-conversion,rgba,C,Gcc,Rgb,Data Conversion,Rgba,好的,我有一个方法,我很难返回期望的结果。所以我做了一个测试结果,它返回了一个我没有预料到的结果 下面是一个例子-> int color = 0x00FFFF00; return 0xFF & (color >> 24) | 0xFF & (color >> 16) | 0xFF & (color >> 8); 据我所知,这应该是回报: 0x00FFFF 然而,它实际上返回: 0x0000FF 有人能解释一下发生了什么事吗?我还
int color = 0x00FFFF00;
return 0xFF & (color >> 24) | 0xFF & (color >> 16) | 0xFF & (color >> 8);
据我所知,这应该是回报:
0x00FFFF
然而,它实际上返回:
0x0000FF
有人能解释一下发生了什么事吗?我还想知道如何正确地将32位RGBA整数转换为24位RGB整数,谢谢。试试这个:
#include <stdio.h>
int main() {
unsigned int x = 0x00FFFF00;
printf("0%8.8x", (x >> 8) & 0x00FFFFFF);
}
$ cc -o shft shft.c
$ ./shft
0x0000ffff
最好将颜色设为无符号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);
在每一个移位中应用&0xFF,因此只有一个有价值的字节,其他字节是零。我知道。我试图获得RGBA整数中的特定颜色值,并将它们转换为RGB整数,然而,clearlight已经帮助我完成了这项工作。我也知道我在这里做错了什么。我应该移动红色和绿色元素的结果以匹配RGB整数。