Flash AS3 BitmapData.draw () влияет на форматирование текста - PullRequest
1 голос
/ 17 ноября 2009

Мне нужно отобразить сглаженные системные шрифты (поскольку размер файла 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 голосов
/ 05 апреля 2018

Очевидно, что когда TextField масштабируется, он не масштабируется так же, как векторный рисунок. Ограничительная область TextField увеличивается, но фактическое содержание текста имеет увеличенный размер шрифта, чтобы вместо этого заполнить эту новую область, что может привести к небольшому сдвигу вертикального выравнивания и / или толканию слов на следующую строку.

0 голосов
/ 18 ноября 2009

Взгляните на новый текстовый движок (требуется Player 10.0, более одного года): http://labs.adobe.com/technologies/textlayout/

...