尝试从图像中获取像素值时发现了一段代码,但我不太了解,

red = (rgb & 0x00ff0000) >> 16;

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

有什么解释?

最佳答案

这是从一个数字(假设一个代表)表示aRGB中的一种颜色中提取红色分量。

第一的:

(rgb & 0x00ff0000)

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

例如,假设您有一个表示vivid cyanint:
int color = 0x0012faff;

然后,这:
int redOnly = color & 0x00ff0000;
System.out.println(redOnly >> 16);

打印:
18

...这是十六进制0x12的十进制值(从上面color中的红色位置开始)。

同样,您可以使用以下方法获取绿色和蓝色组件的值:
int green = (color & 0x0000ff00) >> 8; // 250 = 0xfa
int blue = (color & 0x000000ff); // 255 = 0xff

关于java - 理解这段代码(从整数中提取颜色分量),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8640042/

10-12 23:59