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;
}
}
}