理解这段代码(从整数中提取颜色分量)

Roy*_*her 5 java

我有一段代码,我在尝试从图像中获取像素值时发现,我不太明白,

red = (rgb & 0x00ff0000) >> 16;
Run Code Online (Sandbox Code Playgroud)

我知道如果有红色,它会在值上加1,我认为该0x00ff0000位是红色的十六进制值,并且>>向右移位16位.

解释是什么?

Way*_*ett 10

这是从一个数字中提取红色成分(人们会假设)代表一个RGB中的颜色.

第一:

(rgb & 0x00ff0000)
Run Code Online (Sandbox Code Playgroud)

...使用按位并将rgb除了包含红色分量的字节(第三个最高有效字节)之外的所有位置零.然后,该值右移16位(使用>> 16),以便它占据最右边的字节,然后将其值分配给red.

例如,假设您有一个int代表生动的青色:

int color = 0x0012faff;
Run Code Online (Sandbox Code Playgroud)

那么,这个:

int redOnly = color & 0x00ff0000;
System.out.println(redOnly >> 16);
Run Code Online (Sandbox Code Playgroud)

打印:

18
Run Code Online (Sandbox Code Playgroud)

...这是十六进制的十进制值0x12(来自上面的红色位置color).

同样,您可以使用以下内容获取绿色蓝色组件的值:

int green = (color & 0x0000ff00) >> 8; // 250 = 0xfa
int blue = (color & 0x000000ff); // 255 = 0xff
Run Code Online (Sandbox Code Playgroud)