位图转换 - 从B& W源创建透明+黑色图像

时间:2010-11-12 17:44:47

标签: actionscript-3 transparency alpha bitmapdata

我有一大堆jpg文件需要在项目中使用,出于某种原因无法改变。每个文件类似(手写),白色BG上的黑色笔。但是我需要在我的flash项目中对非白色背景使用这些资源,所以我尝试使用getPixel和setPixel32来做一些客户端处理来摆脱背景。

我目前使用的代码目前使用的是线性比较,虽然它有效但结果却低于预期,因为混合中的灰色阴影会丢失。不仅仅是调整我的参数以使事情看起来正确,我感觉我的计算RGBa值的方法很弱。

有人能推荐比我下面使用的解决方案更好的解决方案吗?非常感谢!

private function transparify(data:BitmapData) : Bitmap {

    // Create a new BitmapData with transparency to return
    var newData:BitmapData = new BitmapData(data.width, data.height, true);
    var orig_color:uint;
    var alpha:Number;
    var percent:Number;

    // Iterate through each pixel using nested for loop
    for(var x:int = 0; x < data.width; x++){
        for (var y:int = 0; y < data.height; y++){

            orig_color = data.getPixel(x,y);

            // percent is the opacity percentage, white should be 0, 
            // black would be 1, greys somewhere in the middle
            percent = (0xFFFFFF - orig_color)/0xFFFFFF;

            // To get the alpha value, I multiply 256 possible values by 
            // my percentage, which gets multiplied by 0xFFFFFF to fit in the right
            // value for the alpha channel
            alpha = Math.round(( percent )*256)*0xFFFFFF;

// Adding the alpha value to the original color should give me the same 
// color with an alpha channel added
            var newCol = orig_color+alpha;
            newData.setPixel32(x,y,newCol);
        }
    }

    var newImg:Bitmap = new Bitmap(newData);
    return newImg;
} 

1 个答案:

答案 0 :(得分:0)

由于它是白色背景,blendMode可能会给你一个更好的结果。