javascript把RGB指定颜色转换成十六进制颜色(Converting R,G,B values to HTML hex notation)

Prologue

看见一篇很好的外国文章,Making annoying rainbows in javascript,其实我当时很想把它翻译下来的,但是对于一个连六级都没过的人确实有点难度,一些文段看起来是知道意思但是就不知道怎么用自己的话来表达。越来越觉得对于IT行业来说英语至少要达到能读的程度,毕竟好的东西很多是外国的,还有哦,要会翻墙。对于那篇文章我其实还没看完,还在慢慢消化中,但是看到一个函数确实真的很吸引我,实现的是Converting
R,G,B values to HTML hex(十六进制) notation。

Perface

当你看见这张照片时,你在想什么?对于文艺青年可能想放飞梦想,自由飞翔,对于二逼青年可能会想气球可不可以带我飞?(好像不太符合角色特点-_-!)。但是程序猿会想为什么计算机会显示这些颜色?确实丰富的色彩丰富我们的生活,我们要的是五彩缤纷的世界而不是只有黑白。怎么感觉在写作文啊!离题了。

description

函数式RGB颜色
计算机可以通过组合不同的红色、绿色和蓝色来创造颜色,所以红、绿、蓝就被叫做颜色分量,每个颜色分量都是8bit,取值范围为0-255
十六进制RGB颜色
But the HTML color specification uses hexadecimal notation for each of the components, so that they each occupy two digits.就是说因为是十六进制,所以用两位就能使的它的取值范围在0-255了。它的格式为#RRGGBB
两者的联系
Component Value(in hex) Value(in decimal)
Red AA 170
Green BB 187
Black CC 204

Content

可以在Making annoying rainbows in javascript中看到它写了一个函数RGB2Color,可以实现把RGB转换成十六进制。

RGB2Color
  function RGB2Color(r,g,b)
{
  return ‘#‘ + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
}
交给byte2Hex函数执行,这个函数很有趣
  function byte2Hex(n)
{
  var nybHexString = "0123456789ABCDEF";
  return String(nybHexString.substr((n >> 4) & 0x0F,1)) + nybHexString.substr(n & 0x0F,1);
}
叫我写这个方法,我觉得我想破脑袋都想不出来还可以这样子玩的

Summary

现在我们来分析那段代码,其实我经常在看《javascript权威指南》总是忽略掉位运算符的,今天看来我之前的习惯是错的

(n>>4)&0x0F
比如我们传来的是值为180,你用(180).toString(2)可以获得它对应的二进制为"10110100",然后你用180>>4执行后为11。所以我们用n>>4是为了获取该值对应二进制的最左边4位的值,然后再用&0x0F把它转换成16进制,而得出来的值是对于nybHexString字符串的下标的,即11对应的是B就找出来了。
n&0x0F
这个可以获取n最右边的值对应的16进制,因为0x0F如果用8位表示的是0000 1111,接上面的例子如180,用二进制表示为1011 0100,因为两者是相与的,而0x0F最左边的4位全是0,而最右边4位全为1,所以我们就可以忽略掉每一个值对应的二进制的最左边的4个位,获取的是每一个值(n)对应的二进制最右边的4个位。

preferences

Making annoying rainbows in javascript

javascript把RGB指定颜色转换成十六进制颜色(Converting R,G,B values to HTML hex notation),布布扣,bubuko.com

时间: 2024-10-01 04:12:19

javascript把RGB指定颜色转换成十六进制颜色(Converting R,G,B values to HTML hex notation)的相关文章

php日期转时间戳,指定日期转换成时间戳

写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储.处理方便,但 是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出互相转换的几种转换方式. 一.在MySQL中完成 这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能用在数据库查询中,有局限性. 1. UNIX时间戳转换为日期用函数: FROM_UNIXTIME() 一般形式:sele

3、将二进制转换成十六进制

/* 将二进制转换成十六进制 */ class BinaryToHex { public static void main(String[] args) { int num = 120; char[] result = new char[1024]; int count = 0; while((num & 15) > 0) { int tmp1 = num & 15; if(tmp1 > 9) { result[count] = (char)(tmp1 - 10 + 'A');

十进制的数转换成十六进制的数 (转)

#include<stdlib.h> #include<string.h> #include<stdio.h> /* * 方 法: decimal2Hex * 功 能:十进制的数转换成十六进制的数 * 参 数:int num : 十进制的数 * 返回值:char * : 十六进制的字符 */ char * decimal2Hex(int num){ int a[100]; int i=0; int m=0; int yushu; char hex[16]={'0','1

「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型

在ROS机器人的应用开发中,调用摄像头进行机器视觉处理是比较常见的方法,现在把利用opencv和python语言实现摄像头调用并转换成HSV模型的方法分享出来,希望能对学习ROS机器人的新手们一点帮助.至于为什么转换成HSV模型,因为在机器视觉方面用HSV模型进行图像处理是比较方便的,实现的方法和效果相对于其他模型都较为突出. 接下来是完整步骤: 1.打开一个终端,用vim编辑器新建并打开一个后缀为.py的文件 1 $ vim a.py 2.在打开的文件里按"a"进入编辑模式,然后输入

Python3基础 字符串 translate 将指定字符转换成另一种特定字符

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: myStr='hello world' #我想把 字符o 转换成 字符a myNewStr=myStr.translate(str.maketrans('o','a')) print(myStr) print(myNewStr) result: ============= RE

object-c将RGB颜色转换成16进制HTML颜色

-(void)color:(NSString *) red andGreen:(NSString*) green andBule:(NSString*) bule{ NSInteger Red = [red integerValue]; NSInteger Green = [green integerValue]; NSInteger Bule = [bule integerValue]; NSInteger colorsize = Red<<16 | Green << 8 | B

十进制转换成十六进制、16进制转2进制

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() { int i,v; char bs[33]; char b[33]; char hs[9]; char h[9]; char s[4]; char *e; // 十进制整数转二进制串: i=1024; ltoa(i,b,2); sprintf(bs,"%032s&quo

斑马打印图片转换成十六进制指令

/// <summary> /// 根据图片生成图片的ASCII 十六进制 /// </summary> /// <param name="sourceBmp">原始图片</param> /// <param name="totalBytes">总共字节数</param> /// <param name="rowBytes">每行的字节数</param>

xml转换为json格式时,如何将指定节点转换成数组 Json.NET

使用Json.NET转换xml成json时,如果xml只有单个节点,但json要求是数组形式[], JsonConvert.SerializeXmlNode 并不能自动识别 示例如下: RecordArray要求是数组格式 <root> <Record> </Record> <RecordArray> <a>1</a> <b>2</b> </RecordArray> </root> 转换