这个语法对于将argb转换为整数意味着什么?

时间:2015-03-31 17:01:16

标签: java rgb

这段代码非常适合我想要做的事情(设置bufferedimage上像素的颜色/ alpha),但我不知道它为什么会起作用。语法是什么意思?我无法以某种方式找到文件。

int rgb = (alpha << 24) | red << 16) | (green << 8) | blue;

结果是什么形式? (会叫什么) 最后,有没有办法将img.getRGB()转换为sepperate a,r,g,b值?

3 个答案:

答案 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

上面的每个字母对应于四个组成部分中的每一个的各个位:

  • aaaaaaaaalpha
  • 的八位
  • rrrrrrrrred
  • 的八位
  • gggggggggreen
  • 的八位
  • bbbbbbbbblue
  • 的八位

答案 1 :(得分:1)

<<left shift operator:它将左侧操作数中的位向左移动右侧操作数中的位数。

|bitwise OR operator:它对操作数的每一位执行OR运算,如果 ,则返回每个位为1的结果操作数在那里有一个1,如果没有,则为0

所以:

  1. alpha值并将其向左移24位
  2. red值并将其向左移16位
  3. green值并将其向左移8位
  4. 将结果合并在一起
  5. 所以说你从

    开始
    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

    一起进行OR运算
    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值