`
qiqishou
  • 浏览: 85243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【原创】Flex操作颜色值及图像颜色变换

    博客分类:
  • flex
阅读更多

 

根据色彩值分离出单色值的方法

Flash里颜色都用uint(无符号整型)来表示,“无符号”意思是没有正负(+-)号,永远为正数。32 位颜色值在 AS 3 中总是以 uint 类型存储,这是因为无符号整型比(有符号)整型能够保留更多的数值。 Int 和 uint 都可以存储 32 位数,这个数值大于 40 亿。


color24表示0xRRGGBB的颜色值

red = color24 >> 16;
green = color24 >> 8 & 0xFF;
blue = color24 & 0xFF;

 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属性的。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics