[Flash] BitmapDataのリサイズ/トリミング

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


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です