이전에 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% 크기로 캡쳐하여 파일을 저장할 수 있는 브라우저가 뜨게 된다.
'Starling' 카테고리의 다른 글
Starling - Introducing 번역 5 > Juggler, Button, TextField, RenderTexture (0) | 2013.07.15 |
---|---|
Starling - Introducing 번역 4 > 무비클립, 퍼포먼스 최적화 (0) | 2013.03.25 |
동적 TextureAtlas (12) | 2012.12.24 |
Starling 1.3 버전 변경점 (0) | 2012.12.13 |
Starling 화면을 비트맵에 찍을려면? (2) | 2012.12.12 |