我有一段代码,我在尝试从图像中获取像素值时发现,我不太明白,
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)
| 归档时间: |
|
| 查看次数: |
4256 次 |
| 最近记录: |