2

AlivePDF で使用するために、HTML テキストをビットマップとしてキャッシュできるようにしたいと考えています。私のテストでは、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

あなたのコードは正常に動作するはずです。BitmapData に描画するために、ステージに textRenderer を追加する必要はありません。textRenderer を真っ黒な背景に描画しています。多分あなたのテキストも黒くて、それが見えないのですか?

0xFF000000 を 0xFFFF0000 などに変更してみて、テキストが表示されるかどうかを確認してください。

于 2012-08-03T18:47:43.193 に答える
1

いいえ、色の問題ではありませんでした。また、色を FF000000 に設定しましたが、これは少なくとも黒で表示されるはずでした。TextField は完全に正常に動作しますが、TextArea はビットマップでうまく動作しないようです。

編集: TextArea は、通常の AS3 スプライトとは異なる動作をする FlexSprite であるため、spark または mx として機能していなかったと思います。表示リストに追加されるまでレンダリングを延期します。

作業機能:

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 に答える