天天看點

flash加載外部圖檔等比縮放類(as3)

package com.sunxinzhe.display

{

import flash.display.Bitmap;

import flash.display.BitmapData;

import flash.display.DisplayObject;

import flash.display.IBitmapDrawable;

import flash.geom.Matrix;

import flash.geom.Rectangle;

/**

* ...圖像資料處理工具

*/

public class BitmapUtil

{

/**

* 擷取按指定尺寸等比例縮放+居中的截圖

* @param target 目标對象

* @param tarW 目标尺寸(寬)

* @param tarH 目标尺寸(高)

* @param full 是否顯示圖檔全貌

* @return

*/

public static function getZoomDraw(target:DisplayObject, 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)?perw:perh):((perw <= perh)?perh:perw);

//計算縮放後與規定尺寸之間的偏移量

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;

}

}

繼續閱讀