2010-04-19 78 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

相關問題