位图颜色替换()阈值

时间:2012-06-21 19:18:40

标签: actionscript-3

是否有一个实际有效的位图颜色替换实现示例?

我正在努力实现以下目标:

在:

后:

注意:我不打算在这里使用颜色矩阵转换。我希望能够选择1种颜色,然后选择一个阈值,然后选择一种新颜色,它可以有效地移动阈值中的所有颜色。

这个想法是否可以非常准确地执行?如果是这样,你能指出我的概念验证吗?

1 个答案:

答案 0 :(得分:1)

只是为了让这个球滚滚而来...我不知道这对你来说是正确的解决方案,但这是一个开始。

answer显示了如何使用BitmapData.threshold方法替换颜色。您可以使用透明像素替换颜色,然后在MovieClip后面添加背景并在颜色之间设置动画。

var inputBitmapData:BitmapData = new BitmapData(200, 200, true, 0xFF0000FF);
inputBitmapData.fillRect(new Rectangle(10, 10, 180, 180), 0xFFFF0000);

var outputBitmapData:BitmapData = new BitmapData(200, 200, true); 
var destPoint:Point = new Point(0, 0); var sourceRect:Rectangle = new Rectangle(0, 0, outputBitmapData.width, outputBitmapData.height); 
var threshold:uint =  0xFFFF0000;  
var color:uint = 0x00000000;     
outputBitmapData.threshold(inputBitmapData, sourceRect, destPoint, "==", threshold, color, 0xFFFFFFFF, true);

var input:Bitmap = new Bitmap(inputBitmapData); addChild(input);
var output:Bitmap = new Bitmap(outputBitmapData); output.x = input.x + input.width + 10; 

addChild(output);

您还可以逐个像素地循环遍历位图数据,以将一种颜色替换为另一种颜色。

for (var j = 0; j < bitmap.height; j++) {
    for (var i = 0; i < bitmap.width; i++) {
        if(bitmapData.getPixel(i,j)==0xFFFF00)  {
            bitmapData.setPixel(i,j, 0xFF0000);
        }
    }
}