16进制颜色转换RGB原理
常见的几种表示颜色的方法有:
ColorName: 直接用颜色的名称来指定颜色,比如: red blue green yellow
- 优点: 很直观的表达想要使用的颜色
- 缺点: 颜色的名称很少, 不能有效表示一些较为丰富的颜色
RGB: 三通道颜色
- 他是目前运用最广泛的颜色系统之一
- 可以通过红绿蓝三色通道, 外加alpha透明度, 来展示几乎所有的颜色
- RGB是从颜色的发光原理来设定的, 相当于红绿蓝三个颜色通过不同亮度, 来组合成为需要的颜色
- 0为最暗, 255为最亮
HEX: 十六进制颜色
- 十六进制与RGB都可以展示出非常丰富的颜色, 他是通过16进制0~F这16个字符来表达颜色的
- 同样, 000000为黑色, FFFFFF为白色
RGB转换为HEX
- RGB与HEX中每个颜色都是一一对应的关系, 如下面的附表所示
RGB的数值 = 16 * HEX的第一位 + HEX的第二位
- 示例如下:
- RGB: 92, 184, 232
- 92 / 16 = 5余12 -> 5C
- 184 / 16 = 11余8 -> B8
- 232 / 16 = 14余8 -> E8
- HEX = 5CB8E8
HEX转换RGB
- 此转换就是将上述的转换逆转即可
- 示例如下
- HEX: F26BC1
- F2 = 15和2 -> 15 * 16 + 2 = 242
- 6B = 6和11 -> 6 * 16 + 11 = 107
- C1 = 12和1 -> 12 * 16 + 1 = 193
转载来源:简书
代码中如何使用十六进制的颜色?
使用演示:
方式一
[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];
}
如何计算的?
0xF86340 & 0xFF0000, 0xF86340 & 0xFF00 ,0xF86340 & 0xFF
分别是什么意思?
0xF86340 & 0xFF0000
,表示 F86340 和 0xFF0000 进行 与
运算,目的是要取出F86340的前两位F8,因为F8表示red颜色通道的值,取出来的值已经是转换好的十进制的了。
0xF86340 | ||||||
---|---|---|---|---|---|---|
十六进制: | F | 8 | 6 | 3 | 4 | 0 |
二进制: | 1111 | 1000 | 0110 | 0011 | 0100 | 0000 |
0xFF0000 | ||||||
---|---|---|---|---|---|---|
十六进制: | F | F | 0 | 0 | 0 | 0 |
二进制: | 1111 | 1111 | 0000 | 0000 | 0000 | 0000 |
位运算
项目 | ||||||
---|---|---|---|---|---|---|
0xF86340二进制: | 1111 | 1000 | 0110 | 0011 | 0100 | 0000 |
运算符: | & | |||||
0xFF0000二进制: | 1111 | 1111 | 0000 | 0000 | 0000 | 0000 |
(计算结果)二进制: | 1111 | 1000 | 0000 | 0000 | 0000 | 0000 |
通过位运算得到结果的1111 1000 0000 0000 0000 0000
,如果将此二进制数转换为十进制数,是一个非常大的数,而每个颜色通道的最大值是255,所以还需要通过位移运算,将得到的结果控制到最大范围内。
如何位移运算?
首先我们先看下面一个二进制数:
0000 0000 0000 0000 1111 1111
===> 该数最大的值是 255 (十进制)。
所以我们只要将之前计算的结果位移到最后的八个二进制位的位置上即可。
1111 1000 0000 0000 0000 0000 >> 16 右移16位0000 0000 0000 0000 1111 1000 (位移后的结果)
0xF86340 & 0xFF00
和 F86340 & 0xFF
分别取出十六进制的 63 和 40 通过位运算和位移运算 转换为十进制,进行颜色值的计算(计算原理和上述一样)。
转载来源:简书
16进制颜色转换RGB原理相关推荐
- [iOS 16进制颜色转换RGB](转)
宏定义方法 #define RGB(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]#define ...
- RGB与16进制颜色转换的原理
Integer有进制转换的方法.也可以自己写进制转换的方法.
- js将16进制颜色转换成RGB格式
js代码如下: function hexToRgb(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(h ...
- JavaScript中16进制颜色与rgb颜色互相转换
16进制转 rgb function hexToRgba(hex, opacity) {if (!hex) hex = '#ededed';let rgba = 'rgba(' + parseInt( ...
- iOS 将16进制颜色转换成UIColor
很多地方我们都使用16进制颜色,但iPhone使用的是UIColor对象,不直接支持16进制颜色,为此,需要我们手动将16进制颜色转换为UIColor - (UIColor *) hexStringT ...
- iOS开发-16进制颜色转换
项目中经常会用到颜色转换,有的是通过十六进制转成数字转颜色,想简单的点直接通过字符串转一下,简单扩展了一下分类UIColor,代码如下: +(UIColor *)colorWithHex:(NSStr ...
- 16进制颜色值 与 rgb颜色值转换
16进制颜色 转换成 rgb hex2rgb(hexColor) {hexColor = hexColor.substring(1)hexColor = hexColor.toLowerCase()l ...
- 16进制颜色及不透明度参考 转换
一.16进制颜色转换 点击访问 二.不透明度转换 100% - FF(完全不透明) 99% - FC 98% - FA 97% - F7 96% - F5 95% - F2 94% - F0 93% ...
- iOS 直接使用16进制颜色
在做iOS开发时,一般我们会吸色,就是产品给的图我们一般会吸色,但是最近吸色时候,老大说有较大的颜色偏差,所以要求我们直接使用UI给出的额16进制颜色,你也可以搜索<RGB颜色值转换成十六进制颜 ...
- iOS之颜色的调用、显示16进制颜色、渐变色
十六进制颜色 #import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface UIColor (HexColor) + (UIColor ...
最新文章
- 通过internet在计算机之间以用户名,第7_8章_计算机网络与internet应用.doc
- 《Linux菜鸟入门》认识linux系统
- Android Sensor——传感器
- php api命名历史,历史上的今天,php接口源码api
- 线性代数二之矩阵加速DP——数学作业,Arc of Dream
- C++类模板5分钟入门
- 深度学习(五十七)tensorflow andorid yolo物体检测测试
- rk3288对于parameter参数文件的解析处理【转】
- SQL数据旋转的问题
- 第十章第二节 阿基米德原理
- matlab重叠图像块拼接,在matlab中拼接图像时如何正确混合?
- 多项式承诺Polynomial commitment方案汇总
- 电脑自主发送信息--python程序
- 生意经之王安论断:网店营销当机立断才能抓住机遇
- arm服务器还是x86架构的服务器,哪个稳定?
- qbittorrent 等待_qBittorrent下载BT电影教程
- 字节数组byte[]转有符号short和无符号unsignedShort
- Python内置函数 vars()函数
- 郝志峰《概率论与数理统计》期末复习笔记
- 生命科学50讲 | 生命·智能 | 笔记和点评