Apache flex 如何为所有非黑色透明的像素着色

Apache flex 如何为所有非黑色透明的像素着色,apache-flex,actionscript-3,colormatrixfilter,Apache Flex,Actionscript 3,Colormatrixfilter,我在Flex中的图像上使用ColorMatixFilter。我真的很接近从过滤器中得到我需要的东西。基本上,用户上传的任何PNG文件我都希望所有不透明的像素都是黑色的。我有一个设置“亮度”的函数,所以我只需要通过一个非常大的负数,比如-1000,它就可以完成这项工作,但问题是,当我稍后在服务器上对PNG文件进行编码时,任何具有任何alpha的像素(比如0.9或更低)都会变成白色 这是我目前使用的代码 public static function setBrightness(value:Numbe

我在Flex中的图像上使用ColorMatixFilter。我真的很接近从过滤器中得到我需要的东西。基本上,用户上传的任何PNG文件我都希望所有不透明的像素都是黑色的。我有一个设置“亮度”的函数,所以我只需要通过一个非常大的负数,比如-1000,它就可以完成这项工作,但问题是,当我稍后在服务器上对PNG文件进行编码时,任何具有任何alpha的像素(比如0.9或更低)都会变成白色

这是我目前使用的代码

public static function setBrightness(value:Number):ColorMatrixFilter
    {
        value = value * (255 / 250);

        var m:Array = new Array();
        m = m.concat([1, 0, 0, 0, value]); // red
        m = m.concat([0, 1, 0, 0, value]); // green
        m = m.concat([0, 0, 1, 0, value]); // blue
        m = m.concat([0, 0, 0, 1, 0]); // alpha

        return new ColorMatrixFilter(m);
    }
我希望所有像素都是纯黑色的,除非像素是完全透明的,并且不确定如何调整值以获得它。

您应该看看,因为它几乎完全符合您的需要。解释链接上的示例,您应该执行以下操作:

// png is your PNG BitmapData
var bmd:BitmapData = new BitmapData(png.width, png.height, true, 0xff000000);
var pt:Point = new Point(0, 0);
var rect:Rectangle = bmd.rect;
var operation:String = "<";
var threshold:uint = 0xff000000;
var color:uint = 0x00000000;
var maskColor:uint = 0xff000000;
bmd.threshold(png, rect, pt, operation, threshold, color, maskColor, true);
//png是您的png位图数据
var bmd:BitmapData=新的BitmapData(png.width,png.height,true,0xff000000);
变量pt:点=新点(0,0);
var rect:Rectangle=bmd.rect;

变量操作:字符串=“我测试了
颜色矩阵
,我觉得它是正确的。问题可能与如何将其编码为png有关。许多编码器在这个过程中丢失了alpha通道。你能提供更多的细节吗?另外,为什么不在客户机上编码呢?ImageSnapshot可以进行png编码。正如Jacob Eggers所说,当透明像素松开其alpha通道时,白色通常是默认颜色