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整数,谢谢。
答
试试这个:
#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);
在每个移位应用& 0xFF因此只有一个有价值的字节,其他的都是零。 –
我知道。我试图获取RGBA整数内的特定颜色值并将它们转换为RGB整数,但clearlight已经帮助我完成了这个。无论如何,我也看到我在这里做错了什么。我应该移动红色和绿色元素的结果来匹配RGB整数。 – SoleCore