
BitmapDataを動的にリサイズ/トリミングするクラスです。
以下ソース。
//////////////////////////////////////////////////////////////////
// Copyright 2016 omame-lab. All Rights Reserved.
//////////////////////////////////////////////////////////////////
package com.omamelab.utils
{
import flash.geom.Matrix;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
public class BitmapDataResizer
{
/**
* サイズ指定によるリサイズ
* @param src 元データ
* @param w リサイズ後の幅
* @param h リサイズ後の高さ
* @param transparent 透明度サポート
* @param fillColor 塗りつぶしカラー
* @return リサイズデータ
*/
public static function resize(src:BitmapData, w:Number, h:Number, transparent:Boolean = false, fillColor:uint = 0xffffffff):BitmapData
{
var ret:BitmapData = new BitmapData(
w,
h,
transparent,
fillColor);
ret.draw(src, new Matrix(w / src.width, 0, 0, h / src.height), null, null, null, true);
return ret;
}
/**
* 比率によるリサイズ
* @param src 元データ
* @param hRatio 水平方向のリサイズ比率
* @param vRatio 垂直方向のリサイズ比率
* @param transparent 透明度サポート
* @param fillColor 塗りつぶしカラー
* @return リサイズデータ
*/
public static function resizeRatio(src:BitmapData, hRatio:Number, vRatio:Number, transparent:Boolean = false, fillColor:uint = 0xffffffff):BitmapData
{
var ret:BitmapData = new BitmapData(
Math.ceil(src.width * hRatio),
Math.ceil(src.height * vRatio),
transparent,
fillColor);
ret.draw(src, new Matrix(hRatio, 0, 0, vRatio), null, null, null, true);
return ret;
}
/**
* トリミング
* @param src 元データ
* @param x トリミング開始x座標
* @param y トリミング開始y座標
* @param w トリミング範囲の幅
* @param h トリミング範囲の高さ
* @param transparent 透明度サポート
* @param fillColor 塗りつぶしカラー
* @return トリミングデータ
*/
public static function trimming(src:BitmapData, x:Number, y:Number, w:Number, h:Number, transparent:Boolean = false, fillColor:uint = 0xffffffff):BitmapData
{
var rect:Rectangle = new Rectangle(x, y, w, h);
var ret:BitmapData = new BitmapData(w, h, transparent, fillColor);
ret.copyPixels(src, rect, new Point(0, 0));
return ret;
}
}
}
サイズ指定によるリサイズ
var resizeBmd:BitmapData = BitmapDataResizer.resize(srcBmd, 300, 200);
リサイズする幅・高さをpxで指定します。
上記例では元画像を300 x 200にリサイズします。
比率指定によるリサイズ
var resizeBmd:BitmapData = BitmapDataResizer.resizeRatio(srcBmd, 0.50, 0.50);
リサイズする幅・高さを比率で指定します。
上記例では元画像を0.50倍(50%)にリサイズします。
トリミング
var resizeBmd:BitmapData = BitmapDataResizer.trimming(srcBmd, 50, 80, 300, 300);
トリミングする範囲を開始座標(x,y)、サイズ(width,height)で指定します。
上記例では元画像の(x,y)=(50,80)の位置より、幅300、高さ300の画像を切り抜きます。
注意点
いずれの場合もリサイズ/トリミング後のデータはコピーとなります。
処理後、必要がなければ元BitmapDataは破棄してください。