关于as3 文本的缩放或旋转所引发的问题的解决方案

在as3 语言中(其他语言中不知道有没有类似的问题),当文本类组件(比如TextField)缩放或旋转时,会出现文字消失不见等问题,这个问题的解决方案有两个:1,使用嵌入字体 2,把文本组件转化为位图进行处理!

第一种方案:就不多说了,这种方案的负作用很多,首先因为要嵌入字体,包含汉字的话,该嵌入字体素材swf,一般都是10M以上。2,使用该嵌入字体时所消耗的cpu挺多的。3,前几天我嵌入一个字体,发现移动文本组件的过程中,出现了一些多余的星星点点的“特效”,哈哈。

第二种方案:有朋友看到这儿会说了,转化为位图会出现缩放时字体变模糊等现象,哈,有办法解决的。这种方案是我目前找到的最好的方案了,哈,该方案是听一个同行朋友讲的!步骤是:1,先把文本组件放大n倍(一般是2的倍数,比如8倍,使用scale来缩放)。2,再把该文本组件转化为位图,注意draw的时候,smoothing参数要设置为true。3,把该位图再缩小n倍,然后就是对该位图进行处理了,这样该位图进行缩放旋转处理,就不会出现旋转后,文字消失不见,或旋转出现字体模糊等现象!理论上,在缩放倍数n倍以内,是不会出现字体模糊等现象,实际上,我缩放到n倍以外,字体模糊现象也不明显。

下面上代码:

           var percent:int=8;

           var percentScale:Number=Number((1/percent).toExponential(3)); 

            var textBmd:BitmapData=beginScaleText(textField,percent);
    var textBm:Bitmap=new Bitmap(textBmd,"auto",true);


    textBm.scaleX=percentScale;
    textBm.scaleY=percentScale;

              /**
* 缩放文本,返回位图数据
* @param box 缩放文本
* @param percent 缩放倍数
* */
public  function beginScaleText(box:TextField=null,percent:Number=8):BitmapData
{
var initBoxW:int=Math.floor(box.width);
var initBoxH:int=Math.floor(box.height);

box.scaleX=percent;
box.scaleY=percent;

var curW:int=Math.floor(box.width);
var curH:int=Math.floor(box.height);

var rect:Rectangle=new Rectangle(0,0,curW,curH);
var percentScale:Number=Number((1/percent).toExponential(3));
var matrix:Matrix=new Matrix();
matrix.scale(percent,percent);

var bmd:BitmapData=new BitmapData(curW,curH,true,0xffffff);
bmd.draw(box,matrix,null,null,null,true);

box.scaleX=percentScale;
box.scaleY=percentScale;
return bmd.clone();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值