关于as3 文本的缩放或旋转所引发的问题的解决方案
2015-06-24 09:48
260 查看
在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();
}
第一种方案:就不多说了,这种方案的负作用很多,首先因为要嵌入字体,包含汉字的话,该嵌入字体素材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();
}
相关文章推荐
- selenium webdriver学习(四)------------定位页面元素(转)
- inner join、left join、right join、full join
- 笔记本为什么都用塑料外壳?
- mysql 删除语句几种常见的用法
- 请问,activemq跟websocket什么区别?
- [cogs] 1464 [NOI1996]三角形灯塔
- Return Negative
- 使用CSS隐藏HTML元素的4种常用方法
- Android中实现远程输入
- js小结
- SGU180:Inversions(树状数组)
- 联网查看图片的Demo
- 使用windbg調試iis應用程序池崩溃的asp.net 2.0 bug.
- Mysql导入大容量SQL文件数据问题
- 许多js框架或js库的min版本是怎么做出来的?
- android开发 获取logcat日志并记录(方便离线调试)
- JScrollPane中添加JPanel不出现滚动条
- mybatis 模糊查询报错: java.sql.SQLException: ORA-01006: 绑定变量不存在
- 嫌工资少,先来看看你值多少钱
- jQuery的$("#id")和document.getElementById("id")的区别