Я немного затрудняю ваш вопрос, но если я правильно понимаю, вот что вам следует сделать:
Сначала используйте BitmapData.draw()
, чтобы сделать «изображение» Спрайта, поместив его в ваш новый экземпляр BitmapData
. Затем вам нужно найти границы прозрачной области. Делайте это отдельно для каждого края. Начиная с каждого края, посмотрите на пиксели с регулярным интервалом (например, каждые 10 пикселей) и посмотрите, все ли они прозрачные. Если это так, двигайтесь к центру на определенное количество пикселей и повторите. Вот пример кода (не проверено!):
// Bitmap data already exists
var bmd:BitmapData; // content already exists
var isTransparent:Function = function(bmd:BitmapData, x:uint, y:uint):Boolean
{
var pixelValue:uint = bmd.getPixel32(0, 0);
var alphaValue:uint = pixelValue >> 24 & 0xFF;
return (alphaValue == 0);
};
// Look at right edge
var curX:uint = bmd.width-1;
var interval:uint = 10;
var iterations:uint = Math.ceil(bmd.height / interval);
var transparentX:uint = curX + 1;
var stillTransparent:Boolean = true;
while (stillTransparent)
{
for (var i:uint=0; i<iterations; i++)
{
var curY:int = i * interval;
if (!isTransparent(bmd, curX, curY))
{
stillTransparent = false;
break;
}
}
// If stillTransparent==true, this entire column was transparent.
// Get ready for next loop by moving in [interval] pixels
if (stillTransparent)
{
transparentX = curX
curX -= interval; // check needed if may be completely transparent
}
}
// transparentX now represents the last known x value on
// the right edge where everything was still transparent.
Наконец, возьмите x
и y
результаты тестов границы прозрачности и используйте их для создания Rectangle
и используйте BitmapData.draw
только для копирования соответствующей непрозрачной части в новый экземпляр BitmapData
.