将css 中的16进制颜色, 转化为 rgb格式

对dojo/_base/Color模块的注解, 源地址 https://github.com/robinxiong/dojo/blob/master/_base/Color.js

function fromHex(color){
        /*
         summary:
            将css的属性值,转变为rgb格式的对像

         "#fff"  -> 0xfff
         长度为4, 一个字符占用代表一个属性, 0x10 == 16(2的4次方,即1后面4个0) === 1 0000, 那么一个f 为 1111
         占位符为 mask = 1111, 用于占住后四位(&用于保留后四位的值), 其它高位清零
         每一次遍历都从后四位开始,所以先获取到 b值,难后移动4位,在获取到 g, 在移动4位,获取到 r
         获取b属性:
         0000 1111 1111 1111 & 0000 0000 0000 1111 (这里只列举出16位, 正常的是32位)
         0000 0000 0000 1111 b保存到变量 c
         0000 1111 1111 1111 >> 4, -> 0000 0000 1111 1111
         获取g属性
         0000 0000 1111 1111 & 0000 0000 0000 1111
         0000 0000 0000 1111 获得到g的值,保存到变量 c
         在移四位,获取r的值

         "ffffff" -> 0xffffff
         长度为8,每两个字符代表一个函数 0xff = 1111 1111
         每次获取后8位,刚好代表颜色值
         */

        var t = {},
                bits = (color.length == 4) ? 4 : 8,//如果是shorthand, #fff, 那么bits为4位, 每一位代表的个属性, 其它的为8位 每两位代表一个属性 #ffffff00
                mask = (1 << bits) - 1; //表示字节占位符, 向左移4位或8位,var a = (1 << 4 ) - 1 -> 10000 - 1,  a.toString(2); // 1111,或者 8位的 1111 1111
        color = Number("0x" + color.substr(1)); //#ff0000 转变为16进制0xff0000;
        if(isNaN(color)){
            return null; // Color
        }
        ["b", "g", "r"].forEach(function(x){
            var c = color & mask;
            color >>= bits;
            t[x] = bits == 4 ? 17 * c : c; // 0xfff , 一个f应该代表 255, 应该当[0-255],按15等份划分,每一等份间隔 17。 所以获得的值需要乘以17, 才能表示rgb中255的值
        });
        t.a = 1;
        return t;	// Color

    }
    console.log(fromHex("#00f"))  // {r:0, g: 0, b:255, a:1}
时间: 2024-10-06 23:10:01

将css 中的16进制颜色, 转化为 rgb格式的相关文章

前端笔试题:拍扁多维数组、提取URL中的参数变成对象、实现string的trim()函数、判断Email地址、16进制颜色转rgb格式

(1)拍扁数组 这是一个著名互联网公司今天的前端笔试题:多维数组维数不定,如[2,4,1,[2,3,4,[1,2],5,3],3,8]拍扁为[2,4,1,2,3,4,1,2,5,3,3,8].维数不定,应该要用递归: 答案: function flatten(arr){ var arrLength=arr.length; for(var i=0;i<arrLength;i++){ if(arr[i].constructor==Array){ arr.splice(i,1,flatten(arr[

iOS开发中16进制颜色(html颜色值)字符串转为UIColor

//16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be

随机16进制颜色生成方法

function colorOb() { var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];var sum =  "";for (var i = 0; i < 6; i++) {//向上取整,得到进制数var num= Math.ceil(Math.random() * 16);sum += arr[id];var sym =  "#&qu

C# RGB与16进制颜色转换方法

http://www.cnblogs.com/goldarch/archive/2010/08/16/1801053.html #region [颜色:16进制转成RGB]        /// <summary>        /// [颜色:16进制转成RGB]        /// </summary>        /// <param name="strColor">设置16进制颜色 [返回RGB]</param>       

16进制颜色字符串转为UIColor

//16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be

16进制颜色与UIColor互转

代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIView *view=[[UIView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)]; view.backgroundColor=[self colorWithHexString:@"e26562&q

16进制颜色代码

Hex Code Color #FFFFFF   #FFFFCC   #FFFF99   #FFFF66   #FFFF33   #FFFF00   #FFCCFF   #FFCCCC   #FFCC99   #FFCC66   #FFCC33   #FFCC00   #FF99FF   #FF99CC   #FF9999   #FF9966   #FF9933   #FF9900   #FF66FF   #FF66CC   #FF6699   #FF6666   #FF6633   #FF66

16进制颜色代码(完全)

当你要给你的网页添加颜色时,有时,你能够直接使用该颜色的名称,但是大多情况下,你只能使用十六进制代码来使用这些颜色.(浏览器能够理解这些代码.) 红色和粉红色,以及它们的16进制代码. #990033 #CC6699 #FF6699 #FF3366 #993366 #CC0066 #CC0033 #FF0066 #FF0033 ..#CC3399.. #FF3399 #FF9999 #FF99CC #FF0099 #CC3366 #FF66CC #FF33CC #FFCCFF #FF99FF #

MD5中使用16进制

MD5中使用16进制消息摘要 分类: java_secruity2012-12-28 13:11 719人阅读 评论(0) 收藏 举报 消息摘要 由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题. 但,二进制数太长了.比如int 类型占用4个字节,32位.比如100,用int类型的二进制数表达将是: 00000000 00000000 00000000 01100100 面对这么长的数进行思考或操作,没有人会喜欢.因此,C,C++,以及java中 没有