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は破棄してください。