[英]What does the syntax mean in Java: new Stream<Integer>(){ … }?
[英]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
上面的每個字母對應於四個組成部分中每個組成部分的各個位:
aaaaaaaa
是alpha
的八個位 rrrrrrrr
是red
的八位 gggggggg
是green
的八位 bbbbbbbb
是blue
的八位 <<
是左移位運算符 :它將左操作數中的位向左移動右操作數中的位數。
|
是一個按位或運算 :它確實對操作數的每個位或操作,返回一個結果,其中每個比特是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
然后剩下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.