2

我希望能够将 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;
    }
4

2 回答 2

2

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

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

于 2012-08-03T18:47:43.193 回答
1

不,这不是颜色问题。此外,我将颜色设置为 FF000000,至少应该显示为黑色。TextArea 似乎不能很好地处理位图,尽管 TextField 工作得非常好。

编辑:我猜 TextArea 不能作为 spark 或 mx 工作,因为它们是 FlexSprite 的东西,它的行为与普通的 AS3 Sprite 不同。它们将延迟渲染,直到它们被添加到显示列表中。

工作功能:

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;
}
于 2012-08-06T02:13:48.627 回答