顏色表示和位操作

2022-01-10 13:34:43 字數 2297 閱讀 9101

今天在看乙個android開源**的時候看到中間有這麼一句:

mtextview.setbackgroundcolor(alpha << 24 | (0xbbffbb));

mtextview.settextcolor(alpha

<< 24 | (0x000000));

其中mtextview是textview類的物件,而alpha是乙個0到255之間的int值。

雖然知道是設定顏色,但是這種寫法還是引起了我的好奇心。

怎麼又是位移操作又是與運算的。

搜尋一下,找到乙份資料:

整理轉述得此文。

首先,顏色各個分量一般是以每8位為乙個單位。

8位,8bit,即乙個位元組,10進製數的取值範圍是0~255,一般用16進製表示,0x開頭,取值範圍是0x000xff(不區分大小寫)。

顏色一般有24位32位兩種表示方法。

24位顏色:每8位表示rgb中的乙個分量。rgb顏色分量的值越大的時候最終顏色越偏向於這個顏色。

32位顏色:除了每8位表示rgb中的乙個分量,還有乙個8位用於表示透明度,表示為argb形式。

a即alpha值,alpha值為0時顏色為透明,alpha值為最大值時顏色為完全不透明,即可完全覆蓋處於它下面的其他顏色,無其他顏色可以透過它而顯示出來。

如圖:

表示顏色分量的數要想轉化成乙個整個的顏色,就必須和其他的分量組合,每個分量放在自己應當處於的位置,就應該進行位移操作。

當然我開始的時候還小迷惑了一下這個資料中給出的例子:,

如果顏色值都是34,23,88等兩位十進位制數,而它所說的轉換居然也就是把數字直接放過去了,那0到255的數字,255咋辦?三位數呢?

後來想了一下,作者的圖是對的,但是文字配的有點問題。

圖中的顏色值34,23和88都是十六進製制表示的,所以移位操作的時候可以直接移動位置表示。

移位後就是整體移動相應的位數,乙個字母代表四位。

r移動16位,g移動8位,b不需要移動。

如果有a值,則a需要向左移動24位。

需要注意的是,不管是用什麼進製表示,十進位制還是十六進製制還是二進位制,位移操作都是二進位制範疇的。

為什麼說原作者有點小錯誤呢?

十進位制的34,用十六進製制表示是0x22。

如果是十進位制r34,g23,b88。移位操作後,得到的顏色數值應該是0x221758。

反向的轉換則是右移。

知道乙個顏色整體值,想提取某乙個顏色分量,方法就是向右移動相應的位數,然後做乙個與運算,與0xff做與運算可以提取最低的兩位。

直接把例子搬過來:

現在我們知道了rgb的16進製制值,那反過來呢?如果我們知道了乙個顏色值,如何反向求解rgb值呢?

var color:uint = 0x342388;

var r:uint = color >> 16;

//右移16位,把2388移出,取0x34

var g:uint = color >> 8 & 0xff;

//右移8位,把88移出,得0x3423,與0xff按位與操作,得0x23

var b:uint = color & 0xff;

//得到0x88

我們再來看看32位的:

var color:uint = 0xff342388;

var a:uint = color >>> 24 //注意這裡是》,無符號右移位操作,右移24位,把342388移出,得到0xff

var r:uint = color >> 16 & 0xff;

//右移16位,把2388移出,取0x34

var g:uint = color >> 8 & 0xff;

//右移8位,把88移出,得0x3423,與0xff按位與操作,得0x23

var b:uint = color & 0xff;

//得到0x88

顏色表示和位操作

今天在看乙個android開源 的時候看到中間有這麼一句 mtextview.setbackgroundcolor alpha 24 0xbbffbb mtextview.settextcolor alpha 24 0x000000 其中mtextview是textview類的物件,而alpha是乙...

24位顏色和32位顏色對比

1.24位顏色和32位顏色對比 rgb 24位顏色,r,g,b 3個16進製制數 argb 32位顏色,a,r,g,b 4個16進製制數 a值 不透明度 r值 紅色比例 g值 綠色比例 b值 藍色比例 ps android開發中最好使用32位 2.android開發中如何使控制項背景透明 andro...

CSS顏色表示法和顏色表

顏色表示法 color name 顏色的名稱 color red 直接用英文意思來寫,但是數量有限,不支援透明顏色 十六進製制方式 color 191d11 所有 開頭的都是16進製制 rgb 十進位制,十進位制,十進位制 表示方法 每個值的取值範圍是0 255,一共256個 rgba 十進位制,十...