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
Указанных выше проблем не имеет.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.