iOS 十六進(jìn)制顏色轉(zhuǎn)換

1. 介紹

  1. 在iOS日常開發(fā)中UIColor 是我們很常用的一個(gè)類,用來呈現(xiàn)出各種顏色,色彩搭配得當(dāng),可以繪制出很漂亮的UI界面.另外顏色也可以用來作為日常開發(fā)調(diào)試UI的一種方式.

  2. 顏色的表示形式有很多種.

    • 十進(jìn)制表示rgb(255,255,255)
    • 十六進(jìn)制 0xC1C1C1
    • 十六進(jìn)制字符串 #C1C1C1
  • RGB 代表三原色,其中R(Red),G(Green),B(Blue) ,分別代表三個(gè)顏色通道.每個(gè)顏色通道的最大值是2^8,也就是256.注意(2^0 = 1) 這里是從1開始 256-1 = 255;共有255中取值.
  • 所以說我們常見的RGB取值范圍是(0~255).
  1. 數(shù)值表示
  • 一個(gè)顏色顯示的描述是由三個(gè)數(shù)值控制的宙刘,他分別為R铅歼、G、B若皱。但三個(gè)數(shù)值位為最大時(shí),顯示為白色,當(dāng)三個(gè)數(shù)值最小時(shí),顯示為黑色吊履。

  • 數(shù)值表示可以使用以下幾種不同的方式:

從0到1之間可用的數(shù)來表示----浮點(diǎn) 從0%到100%----百分比 使用0到255之間的整數(shù),八位數(shù)字表示调鬓,通常表示為十進(jìn)制和十六進(jìn)制的數(shù)值 高端數(shù)字圖像設(shè)備通常會(huì)使用更大的整數(shù)來表示艇炎,比如0 . . 1023(10位),0 . . 65535(16位)或更大 例如紅色在不同方式下的表示

方式 RGB 表示
浮點(diǎn) (1.0, 0.0, 0.0)
百分比 (100%, 0%, 0%)
八位數(shù)字 (255, 0, 0) 或#FF0000 (十六進(jìn)制)
十六位數(shù)字 (65535, 0, 0)
  • 我們?nèi)粘i_發(fā)中作為常用的是浮點(diǎn)數(shù)和八位數(shù)字表示.

注: 這里只是簡(jiǎn)單的介紹RGB,作為快速了解,詳細(xì)請(qǐng)參考維基百科

2. 如何使用十六進(jìn)制顏色?

  • 在iOS日常開發(fā)中你很有可能寫出這樣的代碼[UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha];
  • red,green,blue 代表傳入?yún)?shù),分別是三種顏色通道的取值,除以最大值255(red/255),是以小數(shù)的形式傳入的,分子的取值不能超過255.
  • apha:代表顏色的透明度取值范圍是(0-1)
  • 在日常開發(fā)中我們經(jīng)常見到 #F86340 或者0xF86340 一個(gè)是十六進(jìn)制字符串的形式,一個(gè)是十六進(jìn)制數(shù)值的形式,用來表示顏色的,那我們?nèi)绾问褂?如果轉(zhuǎn)換成十進(jìn)制的表示形式呢?
  • 要完成顏色轉(zhuǎn)換成十進(jìn)制的數(shù),我們需要使用到位運(yùn)算和位移運(yùn)算.

2.1 一個(gè)十六進(jìn)制數(shù)如何表示RGB三原色的?

  • 比如F86340 我們都知道RGB,三個(gè)顏色通道,每個(gè)顏色通道的最大取值是255,如果十進(jìn)制255用十六進(jìn)制表示是FF.
  • 所以我們可以知道每個(gè)顏色通道需要用兩個(gè)十六進(jìn)制數(shù)表示.
  • 一個(gè)完整的十六進(jìn)制表示顏色需要6位.

2.2 如何使用十六進(jìn)制的顏色?

2.2.1 使用演示
[UIColor colorWithRed:((0xF86340 & 0xFF00) >> 8)/255.0 green:((0xF86340 & 0xFF00) >> 8)/255.0 blue:((0xF86340 & 0xFF))/255.0 alpha:1];
或者

+ (UIColor *)ml_colorWithHex:(UInt32)hex alpha:(CGFloat)alpha{
    
    CGFloat score_R = (hex & 0xFF0000) >> 16;
    
    CGFloat score_G = (hex & 0xFF00) >> 8;
    
    CGFloat score_B = (hex & 0xFF);
   
    return [UIColor colorWithRed:score_R/255.0 green:score_G/255.0 blue:score_B/255.0 alpha:alpha];
}

2.2.2 如何計(jì)算的?

  1. 0xF86340 & 0xFF0000, 0xF86340 & 0xFF00 ,0xF86340 & 0xFF 分別是什么意思?
  2. 0xF86340 & 0xFF0000 ,表示 F86340 和 0xFF0000 進(jìn)行與運(yùn)算,目的是要取出F86340的前兩位F8,因?yàn)?code>F8表示red顏色通道的值.

  1. 0xF86340的二進(jìn)制
十六進(jìn)制: F 8 6 3 4 0
二進(jìn)制: 1111 1000 0110 0011 0100 0000
  1. 0xFF0000 的二進(jìn)制
十六進(jìn)制: F F 0 0 0 0
二進(jìn)制: 1111 1111 0000 0000 0000 0000
  1. 位運(yùn)算
0xF86340二進(jìn)制: 1111 1000 0110 0011 0100 0000
運(yùn)算符: &
0xFF0000二進(jìn)制: 1111 1111 0000 0000 0000 0000
(計(jì)算結(jié)果)二進(jìn)制: 1111 1000 0000 0000 0000 0000

通過位運(yùn)算得到結(jié)果的1111 1000 0000 0000 0000 0000,如果將此二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),是一個(gè)非常大的數(shù),而每個(gè)顏色通道的最大值是255,所以還需要通過位移運(yùn)算,將得到的結(jié)果控制到最大范圍內(nèi).


  1. 如何位移運(yùn)算?
  • 首先我們先看下面一個(gè)二進(jìn)制數(shù):
    0000 0000 0000 0000 1111 1111 ===> 該數(shù)最大的值是 255(十進(jìn)制).
  • 所以所我們只要將之前計(jì)算的結(jié)果位移到最后的八個(gè)二進(jìn)制位的位置上即可.
1111   1000     0000     0000      0000     0000  >> 16   右移16位
-------------------------------------------------------------------
0000   0000     0000     0000      1111     1000     (位移后的結(jié)果)

7.0xF86340 & 0xFF00F86340 & 0xFF分別取出十六進(jìn)制的63 和 40 通過位運(yùn)算和位移運(yùn)算 轉(zhuǎn)換為十進(jìn)制,進(jìn)行顏色值的計(jì)算(這里就不在詳解腾窝,計(jì)算原理和上述一樣).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缀踪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虹脯,更是在濱河造成了極大的恐慌驴娃,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循集,死亡現(xiàn)場(chǎng)離奇詭異唇敞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)咒彤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門疆柔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镶柱,你說我怎么就攤上這事婆硬。” “怎么了奸例?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我查吊,道長(zhǎng)谐区,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任逻卖,我火速辦了婚禮宋列,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘评也。我一直安慰自己炼杖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布盗迟。 她就那樣靜靜地躺著坤邪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罚缕。 梳的紋絲不亂的頭發(fā)上艇纺,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音邮弹,去河邊找鬼黔衡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛腌乡,可吹牛的內(nèi)容都是我干的盟劫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼与纽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼侣签!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渣锦,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤硝岗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后袋毙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體型檀,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年听盖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胀溺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皆看,死狀恐怖仓坞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腰吟,我是刑警寧澤无埃,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布徙瓶,位于F島的核電站,受9級(jí)特大地震影響嫉称,放射性物質(zhì)發(fā)生泄漏侦镇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一织阅、第九天 我趴在偏房一處隱蔽的房頂上張望壳繁。 院中可真熱鬧,春花似錦荔棉、人聲如沸闹炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渣触。三九已至,卻和暖如春祥国,著一層夾襖步出監(jiān)牢的瞬間昵观,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工舌稀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啊犬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓壁查,卻偏偏與公主長(zhǎng)得像觉至,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睡腿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 由于公司一個(gè)外包項(xiàng)目语御,別人給的效果圖上標(biāo)注的顏色值是哈希值。但是本菜鳥才疏學(xué)淺席怪,只認(rèn)RGB应闯。這下就懵比了,總不能裝...
    暮雨霜白閱讀 593評(píng)論 2 1
  • 進(jìn)制基本概念 什么是進(jìn)制?進(jìn)制是一種計(jì)數(shù)的方式,數(shù)值的表示形式 常見的進(jìn)制十進(jìn)制挂捻、二進(jìn)制碉纺、八進(jìn)制、十六進(jìn)制 進(jìn)制書...
    低頭看云閱讀 837評(píng)論 0 1
  • 本文通過回顧大家熟悉的十進(jìn)制,并用二進(jìn)制跟它對(duì)比声怔,讓讀者能夠快速理解二進(jìn)制和十六進(jìn)制态贤。 〇、前言 一醋火、深入理解十進(jìn)...
    馮阿良閱讀 12,598評(píng)論 9 10
  • 進(jìn)制基本概念 什么是進(jìn)制?進(jìn)制是一種計(jì)數(shù)的方式,數(shù)值的表示形式 常見的進(jìn)制十進(jìn)制悠汽、二進(jìn)制箱吕、八進(jìn)制、十六進(jìn)制 進(jìn)制書...
    極客江南閱讀 2,008評(píng)論 0 11
  • 前兩天我和我的大學(xué)老師一起吃飯柿冲,席間殖氏,談到了他剛上初一的兒子,他感慨現(xiàn)在的孩子讀書真辛苦姻采,他的兒子今天剛上初一,每...
    吳翰中閱讀 719評(píng)論 1 0