Starling. DisplayObject to Bitmap. (Flash AS3 )

Функция позволяющая получить Bitmap из любого Starling'овского DisplayObject'a.



package {
        
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.geom.Point;
        import flash.geom.Rectangle;
        import starling.core.RenderSupport;
        import starling.core.Starling;
        import starling.display.DisplayObject;
        
        public class StarlingTool {
                
                public static function drawToBitmap(displayObject:DisplayObject):Bitmap {
                        
                        var stageWidth:Number = Starling.current.stage.stageWidth;
                        var stageHeight:Number = Starling.current.stage.stageHeight;
                        
                        var support:RenderSupport = new RenderSupport();
                        RenderSupport.clear();
                        support.setOrthographicProjection(0, 0, stageWidth, stageHeight);
                        support.applyBlendMode(true);
                        
                        var stageBitmapData:BitmapData = new BitmapData(stageWidth, stageHeight, true, 0x0);
                        support.blendMode = displayObject.blendMode;
                        displayObject.render(support, 1.0);
                        support.finishQuadBatch();
                        Starling.context.drawToBitmapData(stageBitmapData);
                        
                        var cropBounds:Rectangle = new Rectangle(0, 0, displayObject.width / displayObject.scaleX, displayObject.height / displayObject.scaleY);
                        var resultBitmapData:BitmapData = new BitmapData(cropBounds.width, cropBounds.height, true, 0x0);
                        resultBitmapData.copyPixels(stageBitmapData, cropBounds, new Point());
                        
                        var resultBitmap:Bitmap = new Bitmap(resultBitmapData);
                        resultBitmap.scaleX = displayObject.scaleX;
                        resultBitmap.scaleY = displayObject.scaleY;
                        return resultBitmap;
                
                }
        }
}


UPDATE 2: Код упрощен и работает лучше прежнего, спасибо iLLuzor!

  • +8

Комментарии (5)

0
из любого Starling'овского DisplayObject'a
Почему тогда функция принимает спрайт?

Заливайте на гитхаб, поковыряем.
0
sprite:DisplayObject принимает-то как раз DisplayObject, а sprite лишь название переменной.
Гитхаб не использую.
0
Точно, не углядел.
0
Код работает криво:
— неправильно определяется cropArea
— прозрачность заполняется чёрным цветом, хотя, вроде, не должна бы.
То, что есть, можно значительно сократить: gist.github.com/illuzor/10999982
0
Обновил: gist.github.com/illuzor/11064959
Указанных выше проблем не имеет.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.