簡體   English   中英

這種語法將argb轉換為整數意味着什么?

[英]What does this syntax mean for turning argb into an integer?

這段代碼非常適合我要執行的操作(在bufferedimage上設置像素的顏色/ alpha),但是我不知道為什么會起作用。 語法是什么意思? 我無法找到有關它的文檔。

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

結果是什么形式? (這叫什么)最后,是否有一種方法可以將img.getRGB()轉換為單獨的a,r,g,b值?

此語法將范圍從0到255的四個8位整數的位組合為單個32位整數。

<<運算符將每個8位數字移到其在32位數字中的最終位置,並根據需要在“ tail”中添加零。 | 然后,運算符將這四個部分合並為一個數字。

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那里,或者0如果沒有。

所以:

  1. alpha值並將其向左移動24位
  2. red值並將其向左移16位
  3. green值並將其向左移8位
  4. 或運算結果

所以說你開始

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

然后剩下16位red

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

它使用左移運算符構造一個位掩碼,以構造此處定義的ARGB值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM