Flex操作颜色值及图像颜色变换
?
根据色彩值分离出单色值的方法
Flash里颜色都用uint(无符号整型)来表示,“无符号”意思是没有正负(+-)号,永远为正数。32 位颜色值在 AS 3 中总是以 uint 类型存储,这是因为无符号整型比(有符号)整型能够保留更多的数值。 Int 和 uint 都可以存储 32 位数,这个数值大于 40 亿。
?
color24表示0xRRGGBB的颜色值
?
Java代码
?
?
<SPAN style="FONT-SIZE: small">red = color24 >> 16;
green = color24 >> 8 & 0xFF;
blue = color24 & 0xFF;</SPAN>
?
color32表示0xAARRGGBB
?
alpha = color32 >> 24;
red = color32 >> 16 & 0xFF;
green = color32 >> 8 & 0xFF;
blue = color32 & 0xFF;
?
?
得到的alpha,red,green,blue等是0—255的单色值。
如果根据单色值合成颜色值的话,也就是上面的逆运算,是这样的
?
color32 = alpha << 24 | red << 16 | green << 8 | blue;
?
图像颜色变换
?
首先获取到想要进行颜色变换显示元素的transform属性,这个属性还有两个重要的属性:
一个是matrix,这个是用来做缩放、旋转、平移的;
另一个是colorTransform,这个是用来对显示元素的整体做颜色变换的。
今天的重点在colorTransform。比如,美工只需给程序提供一幅图片,比如这个图片是一件衣服,程序可以在客户端来渲染,生成这种颜色的衣服,资源只需一张图片,服务器和客户端在这个方面的通信量也只是个32为的无符号整型数。
?
var t:ColorTransform = sth.transform.colorTransform;
t.redMultiplier = redRate;
t.redOffset = redOffset;
//blue,green,alpha同上
?
sth.transform.colorTransform = t;
?
?
?计算公式是
新红色值 = (旧红色值 *redMultiplier
) + redOffset;
?这样sth就会整体进行颜色值的变换了。
?
图像进行像素级的操作
?
?
主要会用到bitmap和bitmapData这两个类,bitmap只是个壳儿,bitmapData储存了实际的像素数据,相当于一个杯子(bitmap),这里面或者是饮料、或者是茶、或者是咖啡(bitmapData),如果想加点糖或者牛奶调调口味的话,跟杯子是没有关系的,只跟里面的水有关系,一杯纯净的水就相当于bitmap里面有个空的bitmapData,bd里面填充了像素点,就是一杯饮料了。
在做粒子系统或者图像快照等都会用到这两个类,bitmapData是个很强大的类,借助BitmapDataChannel可以分离ARBG通道值,可以为单独的某个像素点,甚至是某个像素通道来进行精准控制。并提供了一些有价值的通用函数。理论上来说,可以达到“只有你想不到,没有我做不到”的效果了。bitmapData可以聊的东西有很多,详情还是看API就直接了。bitmap也是显示元素,它也拥有上面说的transform属性的。