BitmapData のリサイズ(拡大・縮小)
AS3で画像(BitmapData)をリサイズ(拡大・縮小)する方法について。
1. 手順
- 元となる BitmapData オブジェクト(A)を用意する。
- 新しい空の BitmapData オブジェクト(B)をリサイズ後のサイズで生成する。
- Matrix オブジェクトを使って(B)にリサイズされた(A)を描画(draw)する。
2. サンプルスクリプト
import flash.geom.Matrix; import flash.display.BitmapData; /** * * BitmapData のリサイズ * * @param BitmapData src 元となる BitmapData オブジェクト * @param Number hRatio 水平方向のリサイズ比率 * @param Number vRatio 垂直方向のリサイズ比率 * @return BitmapData リサイズされた BitmapData オブジェクト * */ public function resize(src:BitmapData, hRatio:Number, vRatio:Number):BitmapData { var res:BitmapData = new BitmapData( Math.ceil(src.width * hRatio), Math.ceil(src.height * vRatio) ); res.draw(src, new Matrix(hRatio, 0, 0, vRatio), null, null, null, true); return res; }
3. 解説
BitmapData オブジェクトの draw メソッドの第2引数(matrix)に Matrix オブジェクトを渡すことで描画される画像の拡大・縮小・回転・変形などが可能となる。今回はリサイズ(拡大・縮小)が目的のため、以下のように Matrix オブジェクトを生成した。hRatio は水平方向(幅)の拡大/縮小率、vRatio は垂直方向(高さ)の拡大/縮小率。
new Matrix(wRatio, 0, 0, hRatio);
また、同メソッドの第6引数(smoothing)を true とすることで、拡大・縮小されたときに画像が粗くなってしまうことを防いでいる。
なお、hRatio と vRatio に同じ値を指定することで、アスペクト比を維持したままリサイズすることも可能。