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

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

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
- Nrjwolf
Комментарии (5)
Заливайте на гитхаб, поковыряем.
Гитхаб не использую.
— неправильно определяется cropArea
— прозрачность заполняется чёрным цветом, хотя, вроде, не должна бы.
То, что есть, можно значительно сократить: gist.github.com/illuzor/10999982
Указанных выше проблем не имеет.