2012-06-21 73 views
2

是否有一个位图颜色替换实现的例子,实际工作?位图颜色替换()阈值

我试图实现以下目标:

前:

后:

注:我并不想用一种颜色矩阵转换在这里。我想要选择1种颜色的能力,然后选择一个阈值,然后选择一种新的颜色,这将有效地移动阈值中的所有颜色。

这个想法可以非常准确地执行吗?如果是的话,你可以指点我一个概念证明?

回答

1

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

这个answer显示了如何使用BitmapData.threshold方法来替换颜色。您可以用透明像素替换颜色,然后在背景后面放置背景,并在颜色之间进行动画处理。

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

感谢您获得此开始。 这种方法将SHIFT或准确地用新颜色替换颜色的阈值? 即:当用户选择红色时,浅蓝色和深蓝色像素(通过阈值设置组合在一起)转换为浅红色和深红色。 – Arturino

+0

我认为这会用1种颜色代替1种颜色。您可以设置一个映射并为其提供多种颜色来替换,但我认为还有更好的方法来做到这一点。对不起,只是想让你指出一个方向(希望不是错误的方向) – potench