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

时间:2017-02-11 03:56:54

标签: c gcc rgb data-conversion rgba

好的,我有一种方法,我很难回复所需的结果。所以我做了一个测试结果,它返回了一个我没想到的结果。

以下是一个示例 - >

int color = 0x00FFFF00;

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

据我所知,这应该回归:

0x00FFFF

然而,它实际上会返回:

0x0000FF

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

2 个答案:

答案 0 :(得分:1)

我也抓住了我做错了什么。我没有移动整数转换的红色和绿色元素以匹配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);

答案 1 :(得分:0)

试试这个:

#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,情况会更好, 否则你可以从左边移开符号位,但在这种情况下,我们将屏蔽掉移位的字节,但要小心。