2014-03-01 17 views
0

Stage3D를 사용하여 만든 AIR 기반 게임이 있습니다. Stage3D 레이어의 일부를 캡처하거나 표시 목록의 비트 맵으로 그려야하지만 Stage3D 레이어는 표시 목록 밖에 있고 완전히 수행 할 방법이 확실하지 않기 때문에 필요합니다.AIR- Stage3D to bitmapData

답변

0

drawToBitmapData() : http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display3D/Context3D.html#drawToBitmapData() (Camera에도 하나 있습니다)을 확인하십시오. 원하는 것으로 보입니다.

당신이 찌르레기를 사용하는 경우, 당신은 이런 식으로 작업을 수행 할 수 있습니다

단계 :

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/