2012-08-03 5 views
2

AlivePDF에서 사용하기 위해 HTML 텍스트를 비트 맵으로 사용할 수 있기를 원합니다. 내 테스트는 TextArea를 사용하거나 구성 요소가 스테이지에 있거나 가시적 인 지 여부와 잘 맞습니다. 그러나 반드시 화면에 앉아 있지 않은 텍스트 블록을 처리 할 수 ​​있기를 원합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?표시 목록에 추가하지 않고 AS3 bitmapdata.draw/스테이지

지금까지

public static function rasterizeText(text:String, width:int = 100, height:int = 100, x:int = 0, y:int = 0):BitmapData { 
     var textRenderer:TextArea = new TextArea(); 
     textRenderer.width = width; 
     textRenderer.height = height; 
     textRenderer.htmlText = text; 

     var bitdata:BitmapData = new BitmapData(width, height, true, 0xFF000000) 
     bitdata.draw(textRenderer); 
     return bitdata; 
    } 
+0

먼저 비트 맵 데이터를 생성하지 않고 저장하는 방법을 알지 못합니다. 무언가가 보이지 않는 곳에서 텍스트를 렌더링 한 다음 나중에 제거하십시오. – loxxy

답변

2

실패했습니다 무엇 코드는 잘 작동합니다. 스테이지에 textRenderer를 추가하여 BitmapData에 그릴 수 있습니다. textRenderer를 단색 검정색 배경에 그립니다. 어쩌면 텍스트도 검은 색이어서 볼 수 없습니다.

0xFF000000을 예 : 0xFFFF0000을 입력하고 텍스트가 표시되는지 확인하십시오.

+0

도움이 되었습니까? :) –

+0

색상 문제라고 생각하지 않습니다. 단지 스테이지에 추가 한 후에 만 ​​효과가있는 것으로 보입니다 (아래의 작품, 캔버스 제거 및 렌더러 그리기가 없습니다) 'public function rasterizeText (text : String , width : int = 100, height : int = 100) : BitmapData { \t var textRenderer : TextArea = new TextArea(); \t textRenderer.width = width; \t textRenderer.height = height; \t textRenderer.textFlow = TextConverter.importToFlow (text, TextConverter.TEXT_FIELD_HTML_FORMAT); \t \t canvas.rawChildren.addChild (textRenderer); \t \t var bitdata : BitmapData = 새 BitmapData (너비, 높이, 거짓) \t bitdata.draw (캔버스); \t return bitdata; \t}' – Lex

1

아니요. 색상 문제가 아닙니다. 또한 색상을 FF000000으로 설정했는데 적어도 검은 색으로 표시해야합니다. TextField는 완벽하게 작동하지만 TextArea는 비트 맵과 잘 어울리지 않는 것 같습니다.

편집 : 정상적인 AS3 Sprites와는 다른 동작을하는 FlexSprite 일 뿐이므로 TextArea가 spark 또는 mx로 작동하지 않는 것으로 생각됩니다. 디스플레이 목록에 추가 될 때까지 렌더링이 지연됩니다.

작동 기능 :

public function rasterizeText(text:String, 
     width:int = 100, height:int = 100):BitmapData { 
    var textRenderer:TextArea = new TextArea(); 
    textRenderer.width = width; 
    textRenderer.height = height; 
    textRenderer.textFlow = TextConverter.importToFlow(text, TextConverter.TEXT_FIELD_HTML_FORMAT); 
    canvas.addElement(textRenderer); 
    var bitdata:BitmapData = new BitmapData(width, height, false, 0xFF000000) 
    bitdata.draw(canvas); 
    return bitdata; 
} 
: 스테이지에서 그릴 때

public function rasterizeText(text:String, 
     width:int = 100, height:int = 100):BitmapData { 
    var textRenderer:TextArea = new TextArea(); 
    textRenderer.width = width; 
    textRenderer.height = height; 
    textRenderer.textFlow = TextConverter.importToFlow(text, TextConverter.TEXT_FIELD_HTML_FORMAT); 
    var bitdata:BitmapData = new BitmapData(width, height, false, 0xFF000000) 
    bitdata.draw(textRenderer); 
    return bitdata; 
} 

가 작동 것이다 그러나 :

public function rasterizeText(text:String, 
     width:int = 100, height:int = 100):BitmapData { 
    var tf:TextField = new TextField(); 
    tf.multiline = true; 
    tf.wordWrap = true; 
    tf.width = width; 
    tf.height = height; 
    tf.htmlText = text; 
    var bd:BitmapData = new BitmapData(width, height, true,0x00000000); 
    bd.draw(tf); 
    return bd; 
} 

이 작동하지 않는 (나는 MX & 스파크 텍스트 영역 구성 요소를 시도)