着色灰度图像as3

时间:2011-05-02 18:51:54

标签: flash actionscript-3 flex4

我需要使用ActionScript 3.0为灰度渐变位图动态着色。渐变形成白色到黑色,最暗的颜色必须是0xFF0000,最亮的0xFFFFFF。尝试使用混合结果的paletteMap和ColorMatrixFilter,没有稳定的解决方案。

3 个答案:

答案 0 :(得分:2)

        var color:uint = 0xFF0000;
        var r:uint = (color >> 16) & 0xFF;
        var g:uint = (color >> 8) & 0xFF;
        var b:uint = color & 0xFF;

        var n:Number = 1/3;

        var matrix:Array = new Array();
        matrix = matrix.concat([n,n,n,0,r]);
        matrix = matrix.concat([n,n,n,0,g]);
        matrix = matrix.concat([n,n,n,0,b]);
        matrix = matrix.concat([0,0,0,1,0]);

        _bitmapData.applyFilter(_bitmapData, _bitmapData.rect, new Point(),  new ColorMatrixFilter(matrix));'

答案 1 :(得分:1)

很可能使用ColorMatrixFilter,通过在红色通道上构建一个255偏移的矩阵(否则就是一个单位矩阵)。

此示例Document类假定FLA库具有720 x 480导出符号“GradientBMD”,它是flash.display.BitmapData子类:

package
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Point;
    import flash.filters.*;

    public class GreyscaleDemo extends Sprite
    {
        public function GreyscaleDemo()
        {
            var bmd:BitmapData = new GradientBMD(720,480);

            var matrix:Array = new Array();
            matrix = matrix.concat([1,0,0,0,255]);
            matrix = matrix.concat([0,1,0,0,0]);
            matrix = matrix.concat([0,0,1,0,0]);
            matrix = matrix.concat([0,0,0,1,0]);

            var colorFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
            bmd.applyFilter(bmd, bmd.rect, new Point(0,0), colorFilter);

            var bitmap:Bitmap = new Bitmap(bmd);
            this.addChild(bitmap);
        }
    }
}

您还可以使用希望渐变渐变到的颜色(代替黑色)创建一个新的bitmapData,并使用BlendMode.ADD将其复制到渐变中:

package
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BlendMode;
    import flash.geom.Point;

    public class GreyscaleDemo extends Sprite
    {
        public function GreyscaleDemo()
        {
            var bmd:BitmapData = new GradientBMD(720,480);
            var bitmap:Bitmap = new Bitmap(bmd);
            this.addChild(bitmap);

            var bmd2:BitmapData = new BitmapData(720, 480, false, 0xFF0000);
            bmd.draw(bmd2, null, null, BlendMode.ADD, bmd.rect,false);
        }
    }
}

答案 2 :(得分:1)

您也可以使用 blendMode =“luminosity”选项,而不是使用ColorMatrixFilter(在另一个答案中描述)。

我在ActionScript中有一篇关于灰度图像的博客文章可能有所帮助: http://flexdevtips.blogspot.com/2011/01/grayscale-images-progressbar-rating.html