2015-03-31 38 views
0

這段代碼完美地適用於我正在嘗試做的事(設置bufferedimage上像素的顏色/ alpha),但我不知道它爲什麼可行。語法是什麼意思?我無法找到關於它的文檔。這個語法是什麼意思將argb轉換爲整數?

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

此外,結果是什麼形式? (會叫什麼) 最後,有沒有辦法將img.getRGB()轉換爲選擇a,r,g,b值?

+1

簡短回答:'<<'表示位移。 http://stackoverflow.com/questions/141525/absolute-beginners-guide-to-bit-shifting可以提供更多關於它的信息 – 2015-03-31 17:04:38

+0

強相關:[如何將ARGB打包爲一個唯一的整數?](http:// stackoverflow .COM /問題/ 7358533 /如何對包-ARGB到一個整數唯一)。 – rgettman 2015-03-31 17:06:43

回答

0

它是使用左移位運算符來構造一個位掩碼來構造其定義here

1

<<的ARGB值是left shift operator:它移動的位在左邊的操作數由數左在右側操作數中的位置。

|bitwise OR operator:它確實在操作數的每一位或操作,返回結果和每個比特爲1如果要麼操作了1那裏,或者0如果既不沒有。

所以:

  1. 注意到alpha值並移動它24位到左側
  2. 注意到red值和它移位16位到左側
  3. 注意到​​值並移動它8位向左
  4. 的OR的結果一起

所以說你開始與

 
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 

然後​​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 
3

該語法結合的4個8位整數範圍從0到255比特到單個32位整數。

<<操作者移動每個8位數目成在32位數字的最終位置,添加零到「尾巴」根據需要;然後|操作員將這四個部分組合成單個數字。

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
  • rrrrrrrr的八位是的red
  • gggggggg八個比特在八位​​
  • bbbbbbbb a re的八位blue