我有一个基于AIR的游戏创建使用Stage3D。我需要捕获Stage3D层的一部分或将其绘制到显示列表上的位图,但由于Stage3D层位于显示列表的后面且完全在显示列表之外,因此不确定如何执行此操作。
发布于 2014-03-02 08:38:47
查看drawToBitmapData():http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#drawToBitmapData() (在Camera上也有一个),它看起来就是你想要的。
如果你使用Starling,你可以这样做:
阶段:
public static function takeScreenshot(scl:Number=1.0):BitmapData
{
var stage:Stage= Starling.current.stage;
var width:Number = stage.stageWidth;
var height:Number = stage.stageHeight;
var rs:RenderSupport = new RenderSupport();
rs.clear(stage.color, 1.0);
rs.scaleMatrix(scl, scl);
rs.setOrthographicProjection(0, 0, width, height);
stage.render(rs, 1.0);
rs.finishQuadBatch();
var outBmp:BitmapData = new BitmapData(width*scl, height*scl, true);
Starling.context.drawToBitmapData(outBmp);
return outBmp;
}DisplayObject:
public static function copyToBitmap(disp:DisplayObject, scl:Number=1.0):BitmapData
{
var rc:Rectangle = new Rectangle();
disp.getBounds(disp, rc);
var stage:Stage= Starling.current.stage;
var rs:RenderSupport = new RenderSupport();
rs.clear();
rs.scaleMatrix(scl, scl);
rs.setOrthographicProjection(0, 0, stage.stageWidth, stage.stageHeight);
rs.translateMatrix(-rc.x, -rc.y); // move to 0,0
disp.render(rs, 1.0);
rs.finishQuadBatch();
var outBmp:BitmapData = new BitmapData(rc.width*scl, rc.height*scl, true);
Starling.context.drawToBitmapData(outBmp);
return outBmp;
}来源:http://blog.flexwiz.net/tip-how-to-take-a-screenshot-in-starling/
https://stackoverflow.com/questions/22114850
复制相似问题