2012-08-03 18 views
2

我希望能夠將HTML文本作爲位圖使用,以便在AlivePDF中使用。我的測試適用於TextArea,或者組件位於舞臺上或可見。但我希望能夠收緊不一定坐在屏幕上的文本塊。有誰知道如何做到這一點?AS3 bitmapdata.draw沒有添加到顯示列表/ Stage

我至今

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 2012-08-03 09:14:04

回答

2

沒有你的代碼應該很好地工作。沒有必要將textRenderer添加到舞臺上,以便將其繪製到BitmapData中。您正在將textRenderer繪製到純黑色背景上。也許你的文字也是黑色的,這就是爲什麼你看不到它?

嘗試將0xFF000000更改爲例如0xFFFF0000並查看文本是否會顯示。

+0

有幫助嗎? :) – 2012-08-03 21:09:04

+0

我不認爲這是一個顏色問題,它似乎只是一旦我已經將其添加到舞臺上工作(下面的作品,刪除畫布和繪製渲染器不) '公共職能rasterizeText(文本:字符串,width:int = 100,height:int = 100):BitmapData {0128} \t textRenderer.width = width; \t textRenderer.height = height; textRenderer.textFlow = TextConverter.importToFlow(text,TextConverter.TEXT_FIELD_HTML_FORMAT); \t \t canvas.rawChildren.addChild(textRenderer); \t \t var bitdata:BitmapData = new BitmapData(width,height,false) \t bitdata.draw(canvas); \t return bitdata; \t}' – Lex 2012-08-06 01:42:34

1

不,這不是顏色問題。另外我的顏色設置爲FF000000,至少應該顯示黑色。 TextArea似乎沒有用位圖表現出色,儘管TextField完美無缺。

編輯:我猜TextArea沒有作爲spark或mx工作,因爲它們是FlexSprite thingy,它的行爲與普通的AS3 Sprites不同。他們將推遲呈現,直到他們被添加到顯示列表。

工作職能:

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 &火花textarea的組件):

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; 
} 

從舞臺中繪製時但是它會工作