본문 바로가기

Starling

Starling 화면 캡쳐



이전에 Starilng 화면을 비트맵에 찍는 방법에 대해 포스팅한 적이 있다. ( Starling 화면을 비트맵에 찍을려면? )

결과적으로 헛짓거리만 하다가 실패한 삽질이였는데


야꼬형의 도움으로 제대로 된 방법을 찾았다.



아래는 stage3D 내용을 bitmapData로 뽑는 레퍼런스의 예제이다. (starling 아님)


 //Clear required before first drawTriangles() call
            renderContext.clear( .3,.3,.3 );
            
            
            //Draw the 2 triangles
            renderContext.drawTriangles( indexList, 0, 2 );
            
            var renderedBitmapData:BitmapData = new BitmapData( viewWidth, viewHeight, true );
            renderContext.drawToBitmapData( renderedBitmapData );
            
            renderContext.present();



1.버퍼를 지우고     renderContext.clear( .3,.3,.3 );


2.렌더링할 대상을그린다음     renderContext.drawTriangles( indexList, 0, 2 );


3.Bitmapdata 에 draw.    renderContext.drawToBitmapData( renderedBitmapData );




이전의 포스팅에선 비트맵데이터는 뽑아냈지만 Starling의 화면이 그려지지 않는 것이 문제였다.

바로 그부분을 해결되면 끝.  2번부분에서 Starling 이 화면을 그리면 된다.


아래는 해당 코드이다.



1.RenderSupport 클래스의 정적 메소드 clear 를 실행하면 내부적으로 Starilng이 참조하는 context3D 객체를 clear 하게 된다.


2.이후 새롭게 만든 RenderSupport 객체를 이용해 현재 스탈링 화면을 그리고


3.비트맵데이터에 draw.


이젠 뭐 다 끝났다. 단 하나 주의 할점은


drawToBitmapData

()메서드 

public function drawToBitmapData(destination:BitmapData):void

언어 버전: ActionScript 3.0
런타임 버전: Flash Player 11, AIR 3

비트맵에 현재 렌더링 버퍼를 그립니다.

백 렌더링 버퍼의 현재 내용이 BitmapData 객체에 복사됩니다. 이 작업은 최대 1초가 걸리는 매우 느린 작업이므로 사용에 주의합니다. 이 함수는 스테이지에 표시되는 전면 렌더링 버퍼가 아니라 그려지는 버퍼를 복사합니다. 스테이지에 표시되는 렌더링된 이미지를 캡처하려면 present()를 호출하기 직전에 drawToBitmapData()를 호출합니다.

이미지는 그려질 때 비트맵에 맞게 크기가 조절되지 않습니다. 대신에 내용이 대상 비트맵의 크기로 클리핑됩니다.


이미지는 그려질 때 비트맵에 맞게 크기가 조절되지 않습니다. 대신에 내용이 대상 비트맵의 크기로 클리핑됩니다.


원하는 사이즈의 bitmapData 를 뽑기 위해선 조금의 수고가 더 필요하다는 정도.



아래는 예제이다.

화면찍기 버튼을 누르면 현재 화면을 50% 크기로 캡쳐하여 파일을 저장할 수 있는 브라우저가 뜨게 된다.




헤헤 끝.