Flash AS类:颜色属性ColorProperty

  • 来源: 中国IT实验室 作者: somesun   2008-03-18/11:30
  •  用AS来调整图片的色调、亮度、灰度、饱和度、对比度、反相虽然不难,但因为涉及到ColorMatrixFilter的颜色矩阵的应用,使用起来有点麻烦,因此写了这个类ColorProperty。

           这个类是对MovieClip类扩展,为MovieClip增加了这些属性:

    • 色调:_color
    • 亮度:_brightness
    • 灰度:_grayscale
    • 饱和度:_saturation
    • 对比度:_contrast
    • 反相:_invert

            当然,你也可以改写这个类,使之成为一个新类,而不是扩展MovieClip类。

    用法(与_width,_height用法一样):

    import ColorProperty;
    ColorProperty.init();
    //色调,用如0xFF0000的16进制
    //img._color=0x333399;
    //trace(img._color);
    //亮度,取值范围为:-255~255
    img._brightness = 100;
    //trace(img._brightness)
    //灰度,布尔值,true为灰度,false则反之。
    //img._grayscale = true;
    //trace(img._grayscale);
    //饱和度,一般范围为:0~3为宜
    //img._saturation = 3;
    //trace(img._saturation);
    //对比度,取值范围为:0~1
    //img._contrast = 0.15;
    //反相,布尔值,true为反相,false则反之。
    //trace(img._contrast);
    //img._invert=true;

    代码如下:

    /**
    * @Name:ColorProperty(MovieClip颜色属性)
    * 色调:_color,亮度:_brightness,灰度:_grayscale,饱和度:_saturation,对比度:_contrast,反相:_invert
    * @author:Flashlizi
    * @version:1.0
    */
    import flash.filters.ColorMatrixFilter;
    class ColorProperty
    {
        //_matrix是ColorMatrixFilter类的默认恒等矩阵
        //_nRed,_nGreen,_nBlue是计算机图形颜色亮度的常量
        //private static var _matrix : Array = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
        private static var _nRed : Number = 0.3086;
        private static var _nGreen : Number = 0.6094;
        private static var _nBlue : Number = 0.0820;
        function ColorProperty ()
        {
        }
        public static function init ()
        {
            setColorProperty ();
            //色调Color
            MovieClip.prototype.addProperty ("_color", MovieClip.prototype.getColor, MovieClip.prototype.setColor);
            //亮度Brightness(取值范围为:-255~255)
            MovieClip.prototype.addProperty ("_brightness", MovieClip.prototype.getBrightness, MovieClip.prototype.setBrightness);
            //灰度Grayscale
            MovieClip.prototype.addProperty ("_grayscale", MovieClip.prototype.getGrayscale, MovieClip.prototype.setGrayscale);
            //饱和度Saturation(饱和度级别一般范围为:0~3)
            MovieClip.prototype.addProperty ("_saturation", MovieClip.prototype.getSaturation, MovieClip.prototype.setSaturation);
            //对比度Contrast(取值范围为:0~1)
            MovieClip.prototype.addProperty ("_contrast", MovieClip.prototype.getContrast, MovieClip.prototype.setContrast);
            //反相Invert
            MovieClip.prototype.addProperty ("_invert", MovieClip.prototype.getInvert, MovieClip.prototype.setInvert);
        }
        private static function setColorProperty ()
        {
            //色调Color,getter&setter
            MovieClip.prototype.getColor = function () : Number
            {
                return MovieClip.prototype._color;
            }
            MovieClip.prototype.setColor = function (nColor : Number) : Void
            {
                var colorStr : String = nColor.toString (16);
                var nRed : Number = Number ("0x" + colorStr.slice (0, 2));
                var nGreen : Number = Number ("0x" + colorStr.slice (2, 4));
                var nBlue : Number = Number ("0x" + colorStr.slice (4, 6));
                var Color_Matrix : Array = [1, 0, 0, 0, nRed, 0, 1, 0, 0, nGreen, 0, 0, 1, 0, nBlue, 0, 0, 0, 1, 0];#p#分页标题#e#
                this.filters = [new ColorMatrixFilter (Color_Matrix)];
                MovieClip.prototype._color = nColor;
            }
            //亮度Brightness,getter&setter
            MovieClip.prototype.getBrightness = function () : Number
            {
                return MovieClip.prototype._brightness;
            }
            MovieClip.prototype.setBrightness = function (offset : Number) : Void
            {
                var Brightness_Matrix : Array = [1, 0, 0, 0, offset, 0, 1, 0, 0, offset, 0, 0, 1, 0, offset, 0, 0, 0, 1, 0];
                this.filters = [new ColorMatrixFilter (Brightness_Matrix)];
                MovieClip.prototype._brightness = offset;
            }
            //灰度Grayscale,getter&setter
            MovieClip.prototype.getGrayscale = function () : Boolean
            {
                return MovieClip.prototype._grayscale;
            }
            MovieClip.prototype.setGrayscale = function (yes : Boolean) : Void
            {
                if (yes)
                {
                    var Grayscale_Matrix : Array = [_nRed, _nGreen, _nBlue, 0, 0, _nRed, _nGreen, _nBlue, 0, 0, _nRed, _nGreen, _nBlue, 0, 0, 0, 0, 0, 1, 0];
                    this.filters = [new ColorMatrixFilter (Grayscale_Matrix)];
                    MovieClip.prototype._grayscale = true;
                } else
                {
                    MovieClip.prototype._grayscale = false;
                }
            }
            //饱和度Saturation,getter&setter
            MovieClip.prototype.getSaturation = function () : Number
            {
                return MovieClip.prototype._saturation;
            }
            MovieClip.prototype.setSaturation = function (nLevel : Number) : Void
            {
                var srcRa : Number = (1 - nLevel) * _nRed + nLevel;
                var srcGa : Number = (1 - nLevel) * _nGreen;
                var srcBa : Number = (1 - nLevel) * _nBlue;
                var srcRb : Number = (1 - nLevel) * _nRed;
                var srcGb : Number = (1 - nLevel) * _nGreen + nLevel;
                var srcBb : Number = (1 - nLevel) * _nBlue;
                var srcRc : Number = (1 - nLevel) * _nRed;
                var srcGc : Number = (1 - nLevel) * _nGreen;
                var srcBc : Number = (1 - nLevel) * _nBlue + nLevel;
                var Saturation_Matrix : Array = [srcRa, srcGa, srcBa, 0, 0, srcRb, srcGb, srcBb, 0, 0, srcRc, srcGc, srcBc, 0, 0, 0, 0, 0, 1, 0];
                this.filters = [new ColorMatrixFilter (Saturation_Matrix)];
                MovieClip.prototype._saturation = nLevel;
            }#p#分页标题#e#
            //对比度Contrast,getter&setter
            MovieClip.prototype.getContrast = function () : Number
            {
                return MovieClip.prototype._contrast;
            }
            MovieClip.prototype.setContrast = function (nLevel : Number) : Void
            {
                var Scale : Number = nLevel * 11;
                var Offset : Number = 63.5 - (nLevel * 698.5);
                var Contrast_Matrix : Array = [Scale, 0, 0, 0, Offset, 0, Scale, 0, 0, Offset, 0, 0, Scale, 0, Offset, 0, 0, 0, 1, 0];
                this.filters = [new ColorMatrixFilter (Contrast_Matrix)];
                MovieClip.prototype._contrast = nLevel;
            }
            //反相Invert,getter&setter
            MovieClip.prototype.getInvert = function () : Boolean
            {
                return MovieClip.prototype._invert;
            }
            MovieClip.prototype.setInvert = function (yes : Boolean) : Void
            {
                if (yes)
                {
                    var Invert_Matrix : Array = [ - 1, 0, 0, 0, 255, 0, - 1, 0, 0, 255, 0, 0, - 1, 0, 255, 0, 0, 0, 1, 0];
                    this.filters = [new ColorMatrixFilter (Invert_Matrix)];
                    MovieClip.prototype._invert = true;
                } else
                {
                    MovieClip.prototype._invert = false;
                }
            }
        }
    }


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多