传统的RGB颜色体系中,每一个分量值的范围都是0到255,如果转换为2进制的话最多需要8位(比如:十进制的255变成二进制则为11111111),三个分量加起来,最多需要24位长度的uint来存储.
而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0,如何高效的从一个表示颜色的unit数字中把这RGB分量提取出来?
当然:最容易想到的是利用字符串拆分,拆成二个二个一组,然后用:
var r: uint = parseInt ( "FF" , 16 );
trace (r)
|
来还原,但是这种方法的效率是很低的,先要转成字符串,再拆分,然后再转为数字。
上面这张图演示了正确做法的原理,同样将已知分量合成为颜色值时,也可以用类似处理,只不过顺序倒过来而已
R分量:先将其左移16位,推到左侧顶端,得到一个包含R分量,其它位置均为0的值
G分量:先将其左移8位,推到中间,得到一个包含G分量,其它位置均为0的值
B分量:不做任何处理
然后将这三个新值,位对位做或运算,只要有值(即1)的部分,就被会保留下来,从而得到新的颜色值。
var color: uint ;
function drawColorRect(r: uint ,g: uint ,b: uint ) {
//直接用位操作合成颜色
color=r<< 16 |g<< 8 |b;
graphics.clear();
graphics.beginFill(color);
graphics.drawRect( 49 , 43 , 267 , 150 );
graphics.endFill();
//lbl1.text = "#" + color.toString(16); 返回16进制的值,不过该值会忽略前导的0
//获取颜色分量
var r: uint = color>> 16 ;
var g: uint = color>> 8 & 0xff ;
var b: uint = color & 0xff ;
lbl1.text = "16进制分量还原结果,红:" + r.toString( "16" ) + ",绿:" + g.toString( "16" ) + ",蓝:" + b.toString( "16" );
} txtR.addEventListener(Event.CHANGE,ChangeHandler); txtG.addEventListener(Event.CHANGE,ChangeHandler); txtB.addEventListener(Event.CHANGE,ChangeHandler); function ChangeHandler(e:Event): void {
drawColorRect(txtR.value,txtG.value,txtB.value);
} drawColorRect(txtR.value,txtG.value,txtB.value); stop(); |
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关推荐
颜色空间转换RGB2HSI HSI = RGB2HSI(RGB) converts an RGB image to HSI. The input image is assumed to be of size M-by-N-by-3, where the third dimension accounts for three image planes: red, green, and ...
提供了一种将uint32_t格式的数据转换为int格式数据的方法,在点云数据转换等领域具有一定的实际应用意义。
public static uint ByteToInt(byte[] b) { uint u = 0; int startIndex = 0; if (b.Length == 8) u = (uint)(b[startIndex + 0] | b[startIndex + 1] | b[startIndex + 2] | b[startIndex + 3] | b[startIndex...
%LAB2RGB Convert an image from CIELAB to RGB % % function [R, G, B] = Lab2RGB(L, a, b) % function [R, G, B] = Lab2RGB(I) % function I = Lab2RGB(...) % % Lab2RGB takes L, a, and b double matrices, or ...
描述在使用C语言进行编程时经常遇到的数据类型间的相互转换问题。
两者的取值范围不相同,那么,如何将uint值转换为int呢? 打开visual studio,创建一个控制台应用程序,本文的所有代码都在Program.cs文件的Main方法中进行演示。首先查看uint无符号整数类型的最大值 uint.MaxValue ...
Java bytes数组与基本类型的相互转换 Int -> Bytes int64ToByte8 int48ToByte6 int40ToByte5 int32ToByte4 int24ToByte3 int16ToByte2 int8ToByte Bytes -> Int bytesToInt64 bytesToInt48 bytesToInt40 bytesTo...
缓冲区到 uint8array 将缓冲区(或字符串)转换为 Uint8Array例子 var tou8 = require ( 'buffer-to-uint8array' ) ;var buf = new Buffer ( 'whatever' ) ;var a = tou8 ( buf ) ;console . log ( a . constructor ...
matlab开发-IEEEsingle精度浮点数字uint32转换器。基于C的S功能块实现双向转换单精度浮点<=>uint32
make_ndvi_colormap.m MATLAB 脚本创建具有 256 种颜色的 NDVI 颜色图显示调色板使用 NDVI 颜色条加载/显示灰度图像将灰度图像转换为 RGB 并保存 NDVI_palletette.jpg NDVI 调色板的图像 sample_input_image.tif ...
所以使用程序读出的都是一个16进制字符串,这时就需要自己手动根据数据类型转换成10进制自己需要的数,自已编写的一个小工具,完美实现各种数据类型16进制与10进制之间的转换,包括Byte、Word、DWord、Int、Dint、...
此代码使用 MEX 将 RGB 图像转换为 C 中的黑白图像。 我一起参加了一个学校项目,但我找不到任何带有图像处理的 MEX 的好例子。 需要注意的是,该代码目前被硬编码为仅处理 UINT8,但是转换该数据类型应该很简单。 ...
python 修改图片后缀,重命名,以及强制改为uint8,可以实现单个功能,上述功能也可以集体实现,避免强制修改后缀后出现格式变化等问题
尤其对于嵌入式开发,因为数据和地址的频繁使用,进制转换的使用频率非常高。比如常用的32位数据分成两个16位数据,2个八位数据转成一个16位数据等。本文基于C/C++来编写程序,实现我们常用的几个进制转换功能。 ---...
此模型说明了将单精度浮点数转换为等效的无符号 32 位字和 8 位(四字节)数据结构并返回的两种方法。 主要目的是提供几种不同的方法来处理 Simulink 中这种类型的转换和位级操作(而不是作为特定问题的综合指南或...
字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小端转换,long大小端转换,ulong大小端转换; short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端...
QByteArray完美数据类型转换成uchar uint8_t,核心代码代码就三行,但是非常好用。Linux和windows下均测试通过
做这个转换每每耗费很多时间,分大小端写了两个函数,测试正确,记录一下,以后直接就用了,也分享给有需要的小伙伴
宾康夫 Blob,Uint8Array,ReadableStream,ArrayBuffer,JavaScript / TypeScript中的字符串的二进制转换器安装npm i -S binconv转换器这是可用的转换器。命名规则: A → B应该是aToB() 。转换功能Base64 → Uint8...