zoukankan      html  css  js  c++  java
  • ColorMatrixFilter色彩矩阵滤镜

     ColorMatrixFilter色彩矩阵滤镜:

    /**
     *
     * *----------------------------------------*
     * |  *** ColorMatrixFilter色彩矩阵滤镜 ***  |
     * *----------------------------------------*
     *
     * 编辑修改收录:fengzi(疯子、wu341、wgq341)
     *
     * 不会写代码,我是代码搬运工。
     * 联系方式:QQ(493712833)。
     *
     * 随   笔: https://www.cnblogs.com/fengziwu/
     *
     * 版权协议:请自觉遵守LGPL协议,欢迎修改、转载、传播给更多需要的人。
     * 免责声明:任何因使用此软件/程序导致的纠纷与软件/程序开发者无关。
     * 日   期: 2019.05.10
     *
     * ---------------------- 实例 --------------------------- *
     * 允许饱和度更改、色相旋转、亮度为 Alpha 以及各种其它效果。 您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象),例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。
     * 注意:对于 RGBA 值,最高有效字节代表红色通道值,其后的有效字节分别代表绿色、蓝色和 Alpha 通道值。
     *
     * mc.filters=[ColorMFUtils.brightness()]
     *
     * var bitmapData:BitmapData = new Img();//Img()是图片BitmapData
     * var bitmap:Bitmap= new Bitmap(bitmapData);
     * bitmapData.applyFilter(bitmapData,bitmapData.rect,new Point(),ColorMFUtils.brightness());
     * addChild(bitmap)
     */
    
    package fengzi.colors
    {
    	import flash.filters.ColorMatrixFilter;
    	public class ColorMFUtils
    	{
    
    		
    		/**
    		 * 亮度调整
    		 * @param     value       取值为-255到255(设置RGB的色彩偏移就能调节其亮度)
    		 * @return    new ColorMatrixFilter
    		 */
    		public static function brightness(value:Number=1.0)
    		{
    			return new ColorMatrixFilter([1,0,0,0,value,
    			                              0,1,0,0,value,
    			                              0,0,1,0,value,
    			                              0,0,0,1,0]);
    		}
    		
    		
    
    		/**
    		 * 颜色反向
    		 * @param     value       取值为0到255(把RGB通道的原通道乘数设为-1,然后再把色彩偏移量设为255就行了)
    		 * @return    new ColorMatrixFilter
    		 */
    		public static function colorReversal(value:Number=255)
    		{
    			return new ColorMatrixFilter([-1,0,0,0,value,
    			                              0,-1,0,0,value,
    			                              0,0,-1,0,value,
    			                              0,0,0,1,0]);
    		}
    		
    		
    
    		/**
    		 * 图像去色
    		 * 原理:只要把RGB三通道的色彩信息设置成一样;即:R=G=B,那么图像就变成了灰色,并且,为了保证图像亮度不变,同一个通道中的R+G+B=1:如:0.3086+0.6094+0.0820=1
    		 *
    		 * @return    new ColorMatrixFilter
    		 */
    		public static function decoloring()
    		{
    			return new ColorMatrixFilter([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]);
    		}
    		
    		
    		
    		
    		/**
    		 * 饱和度
    		 * 当色彩饱和度低到一定成度的时候,就想当于给图像去色,所以跟图像去色,有着千丝万缕的联系;
             * value为原有通道信息保留量;可以理解为百分之几,等于0时完全去色,小于1时降低色度,大于1时增加色度,等于2时色度翻一倍,等于3时……。注意:RGB的原有通道信息保留量都应该相等,不然会产生偏色。
    		 *
             * value是原通道色彩保留量:所以,在原通道中,我们都+ N,这是不能被别的通道瓜分的。剩余的就是(1-value),就让RGB按0.3086, 0.6094, 0.0820的比例还瓜分这个剩余量吧。
    		 *
    		 * @param     value        取值为0到2,当然也可以更高。
    		 * @return    new ColorMatrixFilter
    		 */
    		
    		public static function saturation(value:Number=2)
    		{
    			return new ColorMatrixFilter([
    				0.3086*(1-value) + value, 0.6094*(1-value),         0.0820*(1-value),          0, 0,
                    0.3086*(1-value),         0.6094*(1-value) + value, 0.0820*(1-value),          0, 0,
                    0.3086*(1-value),         0.6094*(1-value),         0.0820*(1-value) + value,  0, 0,
                    0,                        0,                        0 ,                        1, 0]);
    		}
    		
    		
    		
    		
    		/**
    		 * 对比度
    		 * 所谓对比度就是让红的更红,绿的更绿……或反之。
    		 * 设置色彩偏移量 offset。具体要偏移多少呢,我们找到了一个折中的方案:128(1-value);即:一幅图像,不论很亮或很黑,但对比度为0了,最终得到的都是一幅中性灰度的图像(128),
    		 *
    		 * @param     value        取值为0到10
    		 * @return    new ColorMatrixFilter
    		 */
    		
    		public static function contrast(value:Number=10)
    		{
    			return new ColorMatrixFilter([value,0,0,0,128*(1-value),
                                              0,value,0,0,128*(1-value),
                                              0,0,value,0,128*(1-value),
                                              0,0,0,1,0]);
    		}
    		
    		
    		/**
    		 * 阈值
    		 * 所谓阈值,就是以一个色度值为基准对图像作非黑即白的处理(注意没有灰色),由于不去除了彩色属性,因此,也离不开0.3086, 0.6094, 0.0820这三组神奇的数字。
             * 当RGB三个通道的色彩信息一模一样时,图像就失去了色彩(去色),从0.3086*256,0.6094*256,0.0820*256,0,-256*value可以看出图像已经去色了,并且,(*256)亮度已经翻了256倍(当然也可以是255);我们知道,RGB的有效值是0-255,即:0,1,2……255,把这些值乘以255以后会出现什么情况呢?但是除了0之外,别的全都大于或等于255了,所以此时的图像除了剩有几个黑点外,其它的全都变成白色了
    		 *
    		 * @param     value        取值为0到255
    		 * @return    new ColorMatrixFilter
    		 */
    		
    		public static function threshold(value:Number=64)
    		{
    			return new ColorMatrixFilter([
    				0.3086*256, 0.6094*256, 0.0820*256, 0, -256*value,
                    0.3086*256, 0.6094*256, 0.0820*256, 0, -256*value,
                    0.3086*256, 0.6094*256, 0.0820*256, 0, -256*value,
                    0,          0,          0,          1, 0]);
    		}
    
    
    
    
    
    	}
    
    }
    

      

  • 相关阅读:
    WPS设置去广告
    Android,几款apk工具
    Eclipse 使用
    linux su和sudo命令的区别
    CentOS下安装SecureCRT的sz/rz工具包
    CentOS下安装SecureCRT的sz/rz工具包
    CentOS下安装SecureCRT的sz/rz工具包
    VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
    修改CentOS系统的默认启动级别
    修改CentOS系统的默认启动级别
  • 原文地址:https://www.cnblogs.com/fengziwu/p/10908929.html
Copyright © 2011-2022 走看看