Flash AS3 BitmapData.draw()会影响文本格式

时间:2009-11-17 11:46:17

标签: flash fonts draw bitmapdata

我需要显示抗锯齿系统字体(因为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中

谢谢!

2 个答案:

答案 0 :(得分:0)

看一下新的文本引擎(需要Player 10.0,超过一年):http://labs.adobe.com/technologies/textlayout/

答案 1 :(得分:0)

显然,当TextField按比例放大时,它的缩放方式与矢量绘图的缩放方式不同。 TextField的边界区域按比例放大,但实际文本内容的字体大小增加,以填充该新区域,这可能导致垂直对齐轻微移动和/或将字词推送到下一行。