2010-04-19 42 views
0

假设我有一个BitmapData,其中不同像素代表一个对象,还有一些我想要移除的黑色像素。Actionscript 3:如何从BitmapData中删除所有黑色像素?

我想获得一个新的BitmapData,用非黑色像素表示的对象的宽度和高度。例如,假设我有一个BitmapData 400x400px,但由非黑色像素表示的对象占用rect:x = 100,y = 100,width = 200,height = 200。我想要获取代表该矩形的新BitmapData,应删除所有黑色像素。当然,我没有那个矩形的坐标,我需要以某种方式区分全黑位图数据和原始位图数据,并构建一个新的位图数据(不同的宽度和高度)。

有关如何做到这一点的任何想法吗?

回答

5

您可以使用getColorBoundsRect找到你的BitmapData内的不同彩色像素的尺寸:

//some fake data 
var yourBigBmd:BitmapData = new BitmapData(300, 300, false, 0); 
yourBigBmd.fillRect(new Rectangle(10, 10, 30, 60), 0xFF0000); 
//a little notch 
yourBigBmd.fillRect(new Rectangle(10, 10, 10, 10), 0x00000); 

var blackColor:uint = 0x000000; 
var littleBmdBounds:Rectangle = yourBigBmd.getColorBoundsRect(0xFFFFFF, blackColor, false); 
trace("littleBmdBounds: " + littleBmdBounds); 

这将跟踪littleBmdBounds:(X = 10,Y = 10,W = 30,H = 60)

接下来,我们需要复制的内容是在这些边界进入一个新的BitmapData:

var littleBmd:BitmapData = new BitmapData(littleBmdBounds.width, littleBmdBounds.height, true, 0); 
var mx:Matrix = new Matrix(); 
mx.translate(-littleBmdBounds.x, -littleBmdBounds.y); 
littleBmd.draw(yourBigBmd, mx); 

最后,使用门槛删除任何剩余的黑色,并使其透明:

var blackAlphaColor:uint = 0xFF000000; 
var transparentColor:uint = 0x00000000; 
littleBmd.threshold(littleBmd, littleBmd.rect, littleBmd.rect.topLeft, "==", blackAlphaColor, transparentColor) 
+0

非常感谢你,我可以看到这里的模式,所以我可以适应它我的需要:) – 2010-04-19 14:00:55

相关问题