这段代码非常适合我想要做的事情(设置bufferedimage上像素的颜色/ alpha),但我不知道它为什么会起作用。语法是什么意思?我无法以某种方式找到文件。
int rgb = (alpha << 24) | red << 16) | (green << 8) | blue;
结果是什么形式? (会叫什么) 最后,有没有办法将img.getRGB()转换为sepperate a,r,g,b值?
答案 0 :(得分:3)
此语法将四个八位整数的位组合在一个32位整数中,范围从0到255。
<<
运算符将每个8位数字移动到32位数字的最终位置,向&#34;尾部添加0&#34;如所须;然后|
运算符将这四个部分组合成一个数字。
aaaaaaaa 00000000 00000000 00000000 // aaaaaaaa << 24
00000000 rrrrrrrr 00000000 00000000 // rrrrrrrr << 16
00000000 00000000 gggggggg 00000000 // gggggggg << 8
00000000 00000000 00000000 bbbbbbbb // bbbbbbbb
-----------------------------------
aaaaaaaa rrrrrrrr gggggggg bbbbbbbb
上面的每个字母对应于四个组成部分中的每一个的各个位:
aaaaaaaa
是alpha
rrrrrrrr
是red
gggggggg
是green
bbbbbbbb
是blue
答案 1 :(得分:1)
<<
是left shift operator:它将左侧操作数中的位向左移动右侧操作数中的位数。
|
是bitwise OR operator:它对操作数的每一位执行OR运算,如果 ,则返回每个位为1
的结果操作数在那里有一个1
,如果没有,则为0
。
所以:
alpha
值并将其向左移24位red
值并将其向左移16位green
值并将其向左移8位所以说你从
开始alpha = 106 (in binary: 00000000 00000000 00000000 01101010) red = 255 (in binary: 00000000 00000000 00000000 11111111) green = 15 (in binary: 00000000 00000000 00000000 00001111) blue = 170 (in binary: 00000000 00000000 00000000 10101010)
首先,它将alpha
24位的值向左移动:
alpha = 00000000 00000000 00000000 01101010 << 24 becomes: alpha = 01101010 00000000 00000000 00000000
然后red
剩下16位:
red = 00000000 00000000 00000000 11111111 << 16 becomes: red = 00000000 11111111 00000000 00000000
然后green
剩下8位:
green = 00000000 00000000 00000000 00001111 << 9 becomes: green = 00000000 00000000 00001111 00000000
然后将它们与blue
:
alpha = 01101010 00000000 00000000 00000000 red = 00000000 11111111 00000000 00000000 green = 00000000 00000000 00001111 00000000 blue = 00000000 00000000 00000000 10101010 ------------------------------------------- rgb = 01101010 11111111 00001111 10101010
答案 2 :(得分:0)
使用左移位运算符构造一个位掩码来构造定义为here的ARGB值