Prologue

看见一篇非常好的外国文章,Making annoying rainbows in javascript,事实上我当时非常想把它翻译下来的,可是对于一个连六级都没过的人确实有点难度,一些文段看起来是知道意思可是就不知道怎么用自己的话来表达。

越来越认为对于IT行业来说英语至少要达到能读的程度。毕竟好的东西非常多是外国的,还有哦,要会FQ。对于那篇文章我事实上还没看完,还在慢慢消化中,可是看到一个函数确实真的非常吸引我。实现的是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)的更多相关文章

  1. python 练习题:请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串

    # -*- coding: utf-8 -*- # 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串 n1 = 255 n2 = 1000 print(hex(n1)) pr ...

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

    写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储.处理方便,但 是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么 ...

  3. delphi 浮点数float转换成十六进制字符串的方法(FloatToHex)

    重新书写了float型转为十六进制的delphi程序 Function FloatToHex(Value: single): string; var l, i: integer; HexText,te ...

  4. delphi 浮点数转换成十六进制字符串的方法

    我们在研究封包技术时,经常会碰到将浮点数转换成十六进制形式.比如在游戏中人物的座标,经常就用浮点数来表示.怎么将浮点数转换成十六进制字符串形式呢?下面我将写出其在DELPHI中的方法.       先 ...

  5. 图片转换成十六进制TXT文件

    最近学习了图片的转换,就学习了一下图片从二进制转换成十六进制,十六进制TXT文件转换成图片形式. using System; using System.Collections.Generic; usi ...

  6. JavaScript进阶(四)js字符串转换成数字的三种方法

    js字符串转换成数字的三种方法 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b. ...

  7. 将真彩色转换成增强色的方法(即RGB32位或RGB24位颜色转换成RGB16位颜色的函数)

    今天由于程序需要,需要将真彩色转换成增强色进行颜色匹配,上网搜了一下没搜到相应函数,于是研究了一下RGB16位的增强色,写了这个函数: public static int RGB16(int argb ...

  8. wpf中将string格式的颜色转换成color类型

    wpf中Brushes有很多对应的颜色,先盗张图,每个颜色对于的名称和ARGB值有了,问题是有时候我们取到的颜色是ARGB值,而且是string类型的,该怎么转换成color呢,只有转换成color之 ...

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

    在ROS机器人的应用开发中,调用摄像头进行机器视觉处理是比较常见的方法,现在把利用opencv和python语言实现摄像头调用并转换成HSV模型的方法分享出来,希望能对学习ROS机器人的新手们一点帮助 ...

随机推荐

  1. [Egret]长按截屏分享、分享截屏图片、本地存储

    egret 分享有API可以把一个显示对象树渲染成一个位图纹理,我把它赋值给 HTML 的 Image 元素,就实现了图片的显示,在微信中,通过长按图片可以分享出去.当然在其他浏览器可以保存在本地. ...

  2. linux内存排查工具valgrind

    官网:http://valgrind.org/info/about.html 百科介绍:http://baike.baidu.com/link?url=ZdXzff0omzoPpE_yZUlNW9lJ ...

  3. JavaScript中的对象冒充

    JavaScript里没有继承关键字,想要继承一个类需要用到“对象冒充”. <!DOCTYPE html> <html xmlns="http://www.w3.org/1 ...

  4. linux学习笔记5--命令rmdir和rm

    昨天学习了创建目录的命令mkdir ,接下来学习一下linux中删除文件和目录的命令: rm命令. rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根 ...

  5. 设置MATLAB中Current Folder的默认文件夹(转载)

    设置MATLAB中Current Folder的默认文件夹 在我们使用MATLAB的过程中,其Current Folder面板会给我们带来一定的便利性.但遗憾的是,MATLAB自身没有提供友好的设置界 ...

  6. Linux制作wifi热点/无线路由

    参考: http://blog.csdn.net/u011641885/article/details/495121991.工具/原料    有无线网卡(usb接口的RT3070无线网卡).有线网卡的 ...

  7. 小型web服务器thttpd的学习总结(下)

    1.主函数模块分析 对于主函数而言,概括来说主要做了三点内容,也就是初始化系统,进行系统大循环,退出系统.下面主要简单阐述下在这三个部分,又做了哪些工作呢. 初始化系统 拿出程序的名字(argv[0] ...

  8. vim中ctags应用

    ctags(Generate tag files for source code)是vim下方便代码阅读的工具.尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM.并且VIM中已经默认安装 ...

  9. Java设计模式——观察者模式(事件监听)

    最近在看Tomcat和Spring的源码,在启动的时候注册了各种Listener,事件触发的时候就执行,这里就用到了设计模式中的观察者模式. 引-GUI中的事件监听 想想以前在学Java的GUI编程的 ...

  10. Linux上安装Nginx及常用命令

    一.Linux安装软件常用方法 1.rpm(或pkg)安装,类似于Windows安装程序,是预编译好的程序. 1)使用的是通用参数编译,配置参数不是最佳 2)可控制性不强,比如对程序特定组件的定制性安 ...