AS3 bitmapdata.draw无需添加到显示列表/舞台

时间:2012-08-03 08:59:38

标签: actionscript-3 bitmapdata

我希望能够将HTML文本作为位图,以便在AlivePDF中使用。我的测试适用于TextArea,或者如果组件在舞台上或可见。但我希望能够处理不一定坐在屏幕上的文本块。有谁知道怎么做?

到目前为止我失败了

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

2 个答案:

答案 0 :(得分:2)

您的代码应该可以正常运行。无需将textRenderer添加到舞台中以将其绘制到BitmapData中。您正在将textRenderer绘制到纯黑色背景上。也许你的文字也是黑色的,这就是为什么你看不到它?

尝试将0xFF000000更改为例如0xFFFF0000并查看文本是否会显示。

答案 1 :(得分:1)

不,这不是颜色问题。我的颜色设置为FF000000,至少应该显示为黑色。尽管TextField工作得非常好,但TextArea似乎并不适合使用位图。

编辑:我猜测TextArea不是spark或mx,因为它们是FlexSprite的东西,它与普通的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& spark 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 );
    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 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;
}