Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-RGBA转换未返回所需的RGB结果_C_Gcc_Rgb_Data Conversion_Rgba - Fatal编程技术网

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整数。