Шрифт устройства выглядит иначе в Flash player и AIR - PullRequest
0 голосов
/ 30 августа 2011

РЕДАКТИРОВАТЬ:

Это похоже на ошибку в AIR.

Я сообщил об этом здесь: https://bugbase.adobe.com/index.cfm?event=bug&id=2955444

please голосовать за него on

Проблема:

Я пытался отобразить белый текст на цветном фоне во время выполнения FlashPlayer & AIR.К сожалению, текст, отображаемый во время выполнения AIR, выглядит намного хуже, чем FlashPlayer.

Вот как это выглядит (версия AIR вверху, FlashPlayer внизу):

IMG: http://imageshack.us/photo/my-images/710/fontcomparison.png/

Итак, вопрос в том,

  • , почему существует такая разница?
  • как решить эту проблему, чтобы текст в AIR выглядел точно так же, как FlashPlayer один (без вложения шрифтов)?

code: mainmxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Style source="style.css" />
    <s:Label text="() sample text ()" styleName="test" />
</s:Application>

style.css :

/* style.css CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
.test {
    font-family: Arial;
    font-size: 10;
    font-weight: bold;
    color: white;

    background-color: #BC2C49;
    paddingBottom:10px;
    paddingLeft:10px;
    paddingRight:10px;
    paddingTop:10px;
}

1 Ответ

0 голосов
/ 05 сентября 2011

Я наконец нашел обходной путь (основываясь на том факте, что шрифты правильно отображаются на растровых изображениях). Не стесняйтесь использовать его, просто замените <s:Label ...> на <components:LabelWorkaround .../>.

package components
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;

    import spark.components.Label;

    /**
     * <p>This class is a simple workaround for a bug 
     * <a href="https://bugbase.adobe.com/index.cfm?event=bug&id=2955444">#2955444</a>.
     * The trick is to draw base text on a <u>non-transparent</u> bitmap, so it renders correctly.</p>
     *
     * <p>Unfortunately if you would like to have background color other than white, <br/>
     * then you have to pass it using styles.</p>
     * 
     * @author Filip Zawada
     * @license Free to commercial use.
     * 
     * @see spark.components.Label
     * @see flash.display.BitmapData
     */
    public class LabelWorkaround extends Label
    {
        private var textBitmapData:BitmapData;
        private const textBitmap:Bitmap = new Bitmap();

        public function LabelWorkaround()
        {
            super();
            addChild(textBitmap);
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            textBitmap.visible = false; // turn off bitmap layer, to draw base text
            textBitmapData = new BitmapData(unscaledWidth, unscaledHeight, false);
            textBitmapData.draw(this); // render modified base text
            textBitmap.bitmapData = textBitmapData;
            textBitmap.visible = true; // turn on bitmap layer
        }

    }
}
...