应用范例
import tools.imgzoom; 函数 当加载完毕时{ var t:Sprite=new Sprite(); var w:Number=685;//限定的宽度 var h:Number=450;//限定的高度 var t:Sprite=new Sprite();//造个东西准备装图片 var myZoom:imgzoom=new imgzoom(e.target.content.width,e.target.content.height,w,h);//实例化算法 e.target.content.width=myZoom.width();//把加载过来的东西宽度弄了 e.target.content.height=myZoom.height();//把加载过来的东西高度弄了 t.addChild(e.target.content);//加入t的显示列表 }
文件下载:imgzoom.rar
建议用bitmapdata结合matrix来处理这个问题,直接得出需要显示的那块图像数据(更节约资源),可以不用频繁设置坐标和缩放,代码量也会少很多。
贴出关键代码:
public static function getZoomDraw(targetisplayObject, tarW:int, tarH:int,full:Boolean=true):BitmapData { //获取显示对象矩形范围 var rect:Rectangle = target.getBounds(target); //计算出应当缩放的比例 var perw = tarW / rect.width; var perh = tarH / rect.height; var scale = full?((perw <= perh)?perwerh)(perw <= perh)?perherw); //计算缩放后与规定尺寸之间的偏移量 var offerW = (tarW - rect.width * scale) / 2; var offerH = (tarH - rect.height * scale) / 2; //开始绘制快照(这里透明参数是false,是方便观察效果,实际应用可改为true) var bmd:BitmapData = new BitmapData(tarW, tarH, false, 0); var matrix:Matrix = new Matrix(); matrix.scale(scale, scale); matrix.translate( offerW, offerH); bmd.draw(target, matrix); //如果是bitmap对象,释放位图资源 if (target is Bitmap) (target as Bitmap).bitmapData.dispose(); //返回截图数据 return bmd; }
|