1

アンチエイリアス処理されたシステム フォントを表示する必要があります (swf ファイルのサイズは小さい必要があるため、フォントを埋め込むことはできません)。そこで、テキストを手動でアンチエイリアスするためにこのスクリプトを書きました

コード:

    public function renderTextField():BitmapData{
        var w:int = this["mainTextField"].textWidth+10;
        var h:int = this["mainTextField"].textHeight+10;
        var bitmapData:BitmapData = new BitmapData(w*3,h*3,false,0x000000);
        var antialiased:BitmapData = new BitmapData(w,h,false,0x000000);
        var transf:Matrix = new Matrix();
        transf.scale(3,3);
        bitmapData.draw(this["mainTextField"],transf);
        var bitmap:Bitmap = new Bitmap(bitmapData,"auto",true);
        transf = new Matrix();
        transf.scale(1.0/3.0,1.0/3.0);
        antialiased.draw(bitmap,transf,null,null,null,true);
        return antialiased;
    }

これはかなりうまく機能しますが、厄介なことがあります。ドローコールのスケーリングがテキストの書式設定に影響を与えることがあります。たとえば、行の最後の単語は、代わりに次の行の最初の単語になります。これはあってはならないことです。なぜそれが起こるのか、どうすればそれを回避できるのか、誰にも分かりますか? テキストボックスに表示されているとおりに、テキストを bitmapData にレンダリングしたい

ありがとう!

4

2 に答える 2

0

新しいテキスト エンジンを見てみましょう (1 年以上前に Player 10.0 が必要です): http://labs.adobe.com/technologies/textlayout/

于 2009-11-18T10:20:22.043 に答える
0

どうやら、 aTextFieldを拡大しても、ベクトル描画と同じようには拡大されません。のTextField境界領域は拡大されますが、実際のテキスト コンテンツのフォント サイズはその新しい領域を埋めるために拡大されます。これにより、垂直方向の配置がわずかにずれたり、単語が次の行に移動したりする可能性があります。

于 2018-04-05T02:27:05.513 に答える