开发者

how do I color all pixels that are NOT transparent to black

I am using ColorMatixFilter on an Image in Flex. I am really close to getting want I need out of the filter. Basically any PNG file the user uploads I want all pixels that are not transparent to be colored black. I have a function that sets the "brightness" already so I just through a really large negative number at it like -1000 and it does the job but the problem is any pixels that have any alpha to them, say 0.9 or below开发者_开发百科 all end up being white when I encode my PNG file on the server later.

here is the code I am currently using

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);
    }

I would like all pixels to be solid black unless the pixel is completely transparent and not sure how to tweak the values to get that out of it.


You should take a look at BitmapData.threshold() as it does pretty much exactly what you want. Paraphrasing the example on the link you should do something like this:

// 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);

What we've set up here is a call to threshold() that will examine each pixel of png and replace the pixel color with with black if the alpha value for that pixel is not 100% (0xff).

In this case threshold is 0xff000000 (an ARGB value) which corresponds with black at 100% transparency. Our mask color is also set to 0xff000000 which tells threshold() that we are only interested in the alpha (the 'A' in ARGB) values for each pixel. Our value for operation is "less than" meaning if the pixel value determined by applying maskColor is below threshold replace it with color.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜