包 flash.filters
类 public final class ColorMatrixFilter
继承 ColorMatrixFilter  BitmapFilter  Object
使用 ColorMatrixFilter 类可以将 4 x 5 矩阵转换应用于输入图像上的每个像素的 RGBA 颜色和 Alpha 值,以生成具有一组新的 RGBA 颜色和 Alpha 值的结果。 该类允许饱和度更改、色相旋转、亮度为 Alpha 以及各种其它效果。 您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象),例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。
注意:对于 RGBA 值,最高有效字节代表红色通道值,其后的有效字节分别代表绿色、蓝色和 Alpha 通道值。

一、构造方法:

ColorMatrixFilter(matrix:Array = null);

二、matrix属性详解:

注意;这里的matrix并不是Matrix的实例,其实是一个Array;

matrix:Array  [read-write]

由 20 个项目组成的数组,适用于 4 x 5 颜色转换。 matrix 属性不能通过直接修改它的值来更改(例如 myFilter.matrix[2] = 1;)。 相反,必须先获取对数组的引用,对引用进行更改,然后重置该值。

颜色矩阵滤镜将每个源像素分离成它的红色、绿色、蓝色和 Alpha 成分,分别以 srcR、srcG、srcB 和 srcA 表示。 若要计算四个通道中每个通道的结果,可将图像中每个像素的值乘以转换矩阵中的值。 (可选)可以将偏移量(介于 -255 至 255 之间)添加到每个结果(矩阵的每行中的第五项)中。 滤镜将各颜色成分重新组合为单一像素,并写出结果。 在下列公式中,a[0] 到 a[19] 对应于由 20 个项目组成的数组中的条目 0 至 19,该数组已传递到 matrix 属性:

redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4]

greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9]

blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14]

alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
 对于数组中的每个颜色值,值 1 等于正发送到输出的通道的 100%,同时保留颜色通道的值。

计算是对非相乘的颜色值执行的。 如果输入图形由预先相乘的颜色值组成,这些值会自动转换为非相乘的颜色值以执行此操作。

可使用两种经过优化的模式:

三、理解、体会;

matrix是一个长度为4*5=20的数组,其构成如下所示:

var matrix:Array = new Array();

//                                              R  ,G, B,  A, offset
            matrix = matrix.concat([1,  0,  0,  0,  0]); // red
            matrix = matrix.concat([0,  1,  0,  0,  0]); // green
            matrix = matrix.concat([0,  0,  1,  0,  0]); // blue
            matrix = matrix.concat([0,  0,  0,  1,  0]); // alpha

上面是matrix的初始状态。

下面我分先来分析一下其初始状态。

red通道的值:(1,0,0,0,0)表示,R通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜色),色彩偏移量off是0;

。。。

别的通道依次类推。

下面来做一些效果,增加对colorMatrixFilter的认识;

1、调整亮度:

亮度(N取值为-255到255) 
1,0,0,0,N
0,1,0,0,N
0,0,1,0,N
0,0,0,1,0

我们只需要设置一下RGB的色彩偏移就能调节其亮度,是不是很简单呢。

2、颜色反向
-1,0,0,0,255

0,-1,0,0,255

0,0,-1,0,255

0,0,0,1,0

先解释一下颜色反向:就是把0变为255,255变为0,1变为254,254变为1.....

因此,我们只需把RGB通道的原通道乘数设为-1,然后再把色彩偏移量设为255就行了。

3、图像去色:

0.3086, 0.6094, 0.0820, 0, 0
0.3086, 0.6094, 0.0820, 0, 0
0.3086, 0.6094, 0.0820, 0, 0
0    , 0    , 0    , 1, 0

1)、首先了解一下去色原理:只要把RGB三通道的色彩信息设置成一样;即:R=G=B,那么图像就变成了灰色,并且,为了保证图像亮度不变,同一个通道中的R+G+B=1:如:0.3086+0.6094+0.0820=1;

2)、三个数字的由来:0.3086, 0.6094, 0.0820;

按理说应该把RGB平分,都是0.3333333。三个数字应该是根据色彩光波频率及色彩心理学计算出来的(本人是这么认为,当然也查询了一些资料,目前尚未找到准确答案。

在作用于人眼的光线中,彩色光要明显强于无色光。对一个图像按RGB平分理论给图像去色的话,人眼就会明显感觉到图像变暗了(当然可能有心理上的原因,也有光波的科学依据)另外,在彩色图像中能识别的一下细节也可能会丢失。我假想:可能绿色的一些东西会丢失。

下面是我从PS中对RGB都为255的明度对比图:



 
同样的RGB,给人的感觉是绿色最亮,红色次之,蓝色最暗。它们的比例大概是3:6:1,即:0.3086, 0.6094, 0.0820
所以,在给图像去色时我们保留了大量的G通道信息,使得图像不至于变暗或者绿色信息不至于丢失(我猜想)。
4、色彩饱和度
N取值为0到2,当然也可以更高。
0.3086*(1-N) + N, 0.6094*(1-N)    , 0.0820*(1-N)    , 0, 0,
0.3086*(1-N)   , 0.6094*(1-N) + N, 0.0820*(1-N)    , 0, 0,
0.3086*(1-N)   , 0.6094*(1-N)    , 0.0820*(1-N) + N 0, 0,
0        , 0        , 0        , 1, 0
分析:
1、当色彩饱和度低到一定成度的时候,就想当于给图像去色,所以跟第3条:图像去色,有着千丝万缕的联系,在此不想过多解释;
2、N为原有通道信息保留量;可以理解为百分之几,等于0时完全去色,小于1时降低色度,大于1时增加色度,等于2时色度翻一倍,等于3时……。注意:RGB的原有通道信息保留量都应该相等,不然会产生偏色。
3、为什么是这样的计算公式:
N是原通道色彩保留量:所以,在原通道中,我们都+ N,这是不能被别的通道瓜分的。剩余的就是(1-N),就让RGB按0.3086, 0.6094, 0.0820的比例还瓜分这个剩余量吧。

 5、对比度

N取值为0到10
N,0,0,0,128*(1-N)
0,N,0,0,128*(1-N)
0,0,N,0,128*(1-N)
0,0,0,1,0

分析:

所谓对比度就是让红的更红,绿的更绿……或反之。初一想,我们只需要修改RGB的乘数(要一至,不然偏色)。可仔细一琢磨,不对。如果只增加乘数,那么整个图像就会被漂白,(或反之)。好,有办法了,设置色彩偏移量,offset。具体要偏移多少呢,我们找到了一个折中的方案:128(1-N);即:一幅图像,不论很亮或很黑,但对比度为0了,最终得到的都是一幅中性灰度的图像(128),

6、阈值

所谓阈值,就是以一个色度值为基准对图像作非黑即白的处理(注意没有灰色),由于不去除了彩色属性,因此,也离不开0.3086, 0.6094, 0.0820这三组神奇的数字。

(N取值为0到255)

下面的256也可以改成255;(那样就能看到图一和图五的小黑点和小白点);
0.3086*256,0.6094*256,0.0820*256,0,-256*N
0.3086*256,0.6094*256,0.0820*256,0,-256*N
0.3086*256,0.6094*256,0.0820*256,0,-256*N
0, 0, 0, 1, 0

分析:

先不看最后面的色彩偏移:-256*N

前面我们提及过,当RGB三个通道的色彩信息一模一样时,图像就失去了色彩(去色),从0.3086*256,0.6094*256,0.0820*256,0,-256*N可以看出:图像已经去色了,并且,(*256)亮度已经翻了256倍(当然也可以是255);我们知道,RGB的有效值是0-255,即:0,1,2……255,把这些值乘以255以后会出现什么情况呢?但是除了0之外,别的全都大于或等于255了,所以此时的图像除了剩有几个黑点外,其它的全都变成白色了如图一(N=0);那么现在我们再作色彩偏移处理:把RGB都减去255;上次值为255(白色)的现在又变成0(黑色了)超过255的仍然是白色,我们不断的反复减255,图2,图3,图4,图5,分别是N=64,N=128,n=192,n=255时的图像:



 

7、色彩旋转

所谓色彩旋转就是让某一个通道的色彩信息让另一个通道去显示;比如,R显示G的信息,G显示B的信息,B显示R的信息,也可以只拿出一部份信息让给别的通道去显示,至于参数的瓜分可以平分。不必太讲究,但是,始终要坚持的一个原则就是每一个通道中的RGB信息量之和一定要为1,不然将会生偏色,如果您要制作偏色效果又另当别论;请偿试下面的参数

0,1,0,0,0
0,0,1,0,0
1,0,0,0,0
0,0,0,1,0

//---------------

0,0,1,0,0
1,0,0,0,0
0,1,0,0,0
0,0,0,1,0

8、只显示某个通道

1,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,1,0

//上面是只显示红色通道。依次类推。

下载附件:官方调试色盘

ColorMatrixFilter 色彩矩阵滤镜相关推荐

  1. ColorMatrixFilter色彩矩阵滤镜

    一.构造方法: ColorMatrixFilter(matrix:Array = null): 二.matrix属性详解: 注意:这里的matrix并不是Matrix的实例,其实是一个Array: m ...

  2. [转]ColorMatrixFilter--颜色矩阵滤镜

    转自: http://blog.sina.com.cn/s/blog_49b35d540100aks4.html ColorMatrixFilter--颜色矩阵滤镜(flash.filters.Col ...

  3. Color correction matrix(色彩矩阵)的学习思考

    Color correction matrix(色彩矩阵)的学习思考 转载于:Color correction matrix(色彩矩阵)的学习思考 一张好的色彩效果图像,是gamma,AWB,CCM, ...

  4. 【OpenCV 例程300篇】204. 图像的色彩风格滤镜

    OpenCV 例程200篇 总目录 201. 图像的颜色空间转换 202. 查表快速替换(cv.LUT) 203. 伪彩色图像处理 204. 图像的色彩风格滤镜 205. 调节色彩平衡/饱和度/明度 ...

  5. Android色彩矩阵——ColorMatrix

    在Android的开发中,我们少不了对图片进行处理,其中最常使用的数据结构就是位图Bitmap,它包含了一张图片的所有数据. 既然是位图那它就是由一个个像素点组成的.每一个像素点都会有其对应的颜色值- ...

  6. Android 颜色矩阵 滤镜 ColorMatrix (复古,蓝调,淡雅,传统,胶片,怀旧,浪漫等)你想要的滤镜

    首先我来给大家展示一下我的整体效果: 我们要用到的是ColorMatrix,ColorMatrix的三个方法: setRotate:调整色相 setSaturation:调整色彩饱和度 setScal ...

  7. AS3之BitmapData学习整理

    http://www.cnblogs.com/psj2002/archive/2011/02/17/1957277.html 最近在看BitmapData这个类,对这个东西也不是很熟悉,所以在网上看了 ...

  8. Egret中颜色矩阵和滤镜的使用与介绍

    一:颜色矩阵 颜色矩阵说明 颜色矩阵数据说明: 实际的颜色值由下面的公式决定: redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + ...

  9. AS3.0中的显示编程(末篇)-- 滤镜(下)

    剩下的三种滤镜,因为我自己也不是很懂矩阵啊这些的,只能做些简单的范例和说明了,抱歉!颜色矩阵滤镜.卷积滤镜.置换图滤镜这三种滤镜只能通过AS代码实现.如果说上面的六种滤镜,只是在原图的基础上做些简单的 ...

最新文章

  1. len(x) 击败 x.len(),从内置函数看 Python 的设计思想
  2. 重入锁:ReentrantLock 详解
  3. php滚动窗口多条动态,详解原生JS是实现控制多个滚动条同步跟随滚动
  4. SAP UI5 binding, property binding and resourceBinding
  5. pytorch图像检索评价指标MAP
  6. altium 网口差分走线长度_差分信号的优缺点及布线要求
  7. SAP License:SAP会计凭证抬头的字段状态控制
  8. linux查看history及操作时间,linux下查询history操作时间的方法
  9. uni-app多端开发,问题总结
  10. 路由器(Tenda 811R)变砖——修复
  11. Hive下载安装及配置
  12. C Primer Plus(第6版)第一章复习题答案
  13. 【上电即上华为云】华为云openCPU智联模组_wifi_HF-LPX70_RISC-V_CoAP
  14. 显示文件内容时显示行号命令nl
  15. Windows RC版、RTM版、OEM版、RTL版、VOL版的区别
  16. 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题(点击多次跳转)
  17. C语言自学路之将小写数字完美转换成大写数字
  18. Teardrop代码编程,伪造一个虚假地址的IP包和SOCKET应用实例
  19. 电工——人社三方——职业技能等级证书
  20. 第七章-数据分析-数据透视表的应用

热门文章

  1. mysql的表导入pgsql用_postgresql 导入数据库表并重设自增属性的操作
  2. python中如何创建一个空列表_Python创建空列表的字典2种方法详解
  3. 计算机 学术论文写作,计算机辅助学术论文写作系统的研制策略与方法.pdf
  4. JS报错:Uncaught(in promise)DOMException:play()
  5. TypeScript学习(一):原始数据类型的定义
  6. PCL之点云分割算法概述
  7. Halcon缺陷检测——机器学习1
  8. Halcon 摄像机标定流程-代码实现
  9. 如何使用视频转换器将ogg格式转换为MP3格式
  10. 对于Linux安装mysql5.7版本出现的问题