actionscript-3 - 如何在 Actionscript 3 中真正栅格化文本?

标签 actionscript-3 text rasterizing

Actionscript 位图(或 BitmapData)很奇怪。不仅它的cacheAsBitmap默认为false,而且BitmapData似乎并不只是一个位图!

我发现,动画文本行 alpha 会让它们闪烁。我尝试通过多种方式解决这个问题,其中之一是将带有背景的文本绘制到位图并对位图进行动画处理:

package 
{
    import flash.events.Event;
    import flash.display.Sprite;

    import flash.display.Bitmap;
    import flash.display.BitmapData;

    import flash.text.TextField;

    public class Main extends Sprite 
    {
        private var bdata1:BitmapData = new BitmapData ( 150, 50, false, 0xDDDDFF );
        private var bitmap1:Bitmap = new Bitmap( bdata1 );
        private var bdata2:BitmapData = new BitmapData ( 100, 100, false, 0x00FFFF );
        private var bitmap2:Bitmap = new Bitmap ( bdata2 );

        private var show:Boolean = false;

        public function Main():void 
        {
            stage.frameRate = 1;
            var tf:TextField = new TextField ();
            tf.text = "layer top";
            bdata1.draw( tf );
            tf.text = "layer bottom"
            bdata2.draw ( tf );

            //*
            bitmap1.cacheAsBitmap = true;
            bitmap2.cacheAsBitmap = true;
            //*/

            addChild ( bitmap2 );
            addChild ( bitmap1 );
            addEventListener (Event.ENTER_FRAME, onEnterFrame );
        }   

        private function onEnterFrame ( e:Event ):void
        {
            if ( show ) var diff:Number = .2;
            else diff = -.2;

            bitmap1.alpha += diff;
            if ( bitmap1.alpha >= 1 ) {
                show = false;
                bitmap1.alpha = 1;
            }
            else if ( bitmap1.alpha <= 0 ) {
                show = true;
                bitmap1.alpha = 0;
            }
        }
    }
}

它应该做的是在“底层”和“顶层”文本之间平滑(好吧,如果您更改 FPS)过渡。它的作用很奇怪,至少在我的机器上,清楚地表明位图中的文本不被视为位图,但仍被视为矢量(可能是 TextLine)。那么BitmapData只是模拟位图吗?这是一个错误吗?我错过了什么吗?

最佳答案

首先,您需要在swf中嵌入Font。假设您已嵌入“Arial”。然后试试这个:

var tf:TextField = new TextField ();
var tf_format:TextFormat = tf.defaultTextFormat;
tf_format.font = "Arial";   //Specifying embedded font's name
tf.defaultTextFormat = tf_format; 
tf.embedFonts = true;
tf.antiAliasType = AntiAliasType.ADVANCED;
//.........

此后,您将拥有“平滑文本”。

关于actionscript-3 - 如何在 Actionscript 3 中真正栅格化文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10672629/

相关文章:

jQuery 仅分割没有特定类别的单词

objective-c - 您对闪存在不久的将来有什么期望?

flash - 如何使用 1 个未知路径处理 GC Root YES 对象?

text - UTF-8 字符串总是比 UTF-16 短吗?

linux - 如何通过将文件名与文本文件中名称的子字符串匹配来重命名文件

c++ - 3D 三角形光栅化为体素网格

c++ - 修复线光栅化算法的近似值

c++ - 两点之间的曲线怎么画? OpenGL

actionscript-3 - 在纯 Actionscript 3 项目中将 .swc Assets 加载到数组中

javascript - 在 IE 中重新加载 html 页面中嵌入的 swf