グラデーショングローフィルター

(サンプル一覧を表示する)

FlashDevelop を使って、画像にグラデーショングローフィルターを設定してみました。
グローとは、光を出すとか燃えるように輝くとかそういう意味だそうです。

Flash の実行画面
グラデーショングローフィルター

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

元の画像 グラデーショングローフィルター
左が内側にグローを、右が外側にグローをかけた状態です。
内側にかけた方が 1 色になってしまっています。

ソースコード

package 
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.filters.BitmapFilter;
	import flash.filters.BitmapFilterQuality;
	import flash.filters.BitmapFilterType;
	import flash.filters.GradientGlowFilter;
	
	/**
	 * グラデーショングローフィルターのサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 埋め込み画像
		 */
		[Embed(source='../image/test001.png')]
		private var image1:Class;
		
		/**
		 * ビットマップ
		 */
		private var bitmap1:Bitmap;
		private var bitmap2:Bitmap;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化イベント
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// ビットマップの準備
			bitmap1 = Bitmap(new image1);
			RegisterBitmap(bitmap1, 10, 10, 2.0);
			
			bitmap2 = Bitmap(new image1);
			RegisterBitmap(bitmap2, 150, 10, 2.0);
			
			// フィルターを作成して、ビットマップに適用する
			var filter1:BitmapFilter = getGradientGlowFilter(true);
            var myFilters1:Array = new Array();
            myFilters1.push(filter1);
			
			var filter2:BitmapFilter = getGradientGlowFilter(false);
            var myFilters2:Array = new Array();
            myFilters2.push(filter2);
			
            bitmap1.filters = myFilters1;
            bitmap2.filters = myFilters2;
		}
			
		/**
		 * ステージにビットマップを登録して表示する
		 * @param	bitmap	表示するビットマップ
		 * @param	x		X 座標
		 * @param	y		Y 座標
		 * @param	scale	拡大率
		 */
		private function RegisterBitmap(bitmap:Bitmap, x:int, y:int, scale:Number):void
		{
			bitmap.smoothing = true;
			bitmap.cacheAsBitmap = true;
			bitmap.x = x;
			bitmap.y = y;
			bitmap.scaleX = scale;
			bitmap.scaleY = scale;
			addChild(bitmap);
		}
		
		/**
		 * グラデーショングローフィルターを作成して返す
		 * @return	グラデーショングローフィルター
		 */
		private function getGradientGlowFilter(innerFlag:Boolean):BitmapFilter
		{
			var distance:Number = 0;
			var angle:Number    = 45;
			var colors:Array    = [0xFFFFFF, 0xFF0000, 0xFFFF00, 0x00CCFF];
			var alphas:Array    = [0, 0.5, 1, 0.5];
			var ratios:Array    = [0, 64, 128, 255];
			var blurX:Number    = 10;
			var blurY:Number    = 10;
			var strength:Number = 3;
			var quality:Number  = BitmapFilterQuality.HIGH;
            var type:String;
			if (innerFlag == true)
				type = BitmapFilterType.INNER;
			else
				type = BitmapFilterType.OUTER;
			var knockout:Boolean = false;

			return new GradientGlowFilter(distance,
										  angle,
										  colors,
										  alphas,
										  ratios,
										  blurX,
										  blurY,
										  strength,
										  quality,
										  type,
										  knockout);
		}

	}
	
}		

参照

外部リンク