ActionScript3でJPEG

2009.10.18 日曜日

Flashで生成したBitmapDataをJPEG操作する際のメモ。

エンコード(BitmapData→JPEG)は、「as3corelib」のJPGEncoderクラスでもいいですが、FLASH Player 10 以上であれば、Vector型配列に最適化されている「Optimized JPEG Encoder」の方が処理速度が速いのでお勧め。デコード(JPEG→BitmapData)は、ちょっと面倒ですがLoaderクラスを使います。

PNGのエンコードには「as3corelib」を使うのが簡単だと思います。デコードはJPEGと同じ方法で問題ありません。

下記サンプルコードは、起動時にノイズ画像を生成して描画、それをJPEGにエンコード後、デコードして描画しています。Encode()の第2引数が圧縮率で100が最も画像がきれい(低圧縮)になります。Decode()は第1引数のByteArrayを第2引数のBitmapDataに描画します。

package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.ByteArray;

	public class Main extends MovieClip {

		//初期設定
		public function Main():void {

			//画像(ノイズ)を生成
			var src:BitmapData = new BitmapData(300, 300);
			src.noise(0);

			//画像をJPEGにエンコード後、デコード
			var result:BitmapData = new BitmapData(300, 300)
			Decode(Encode(src, 0), result);

			//元画像を表示
			var SampleA:Bitmap = new Bitmap(src);
			this.addChild(SampleA);

			//JPEG圧縮後の画像を表示
			var SampleB:Bitmap = new Bitmap(result);
			this.addChild(SampleB);
			SampleB.x = SampleA.width;
		}

		//エンコード
		private function Encode(_bmp:BitmapData, _quality:uint = 50):ByteArray {

			//エンコーダーの設定
			var encoder:JPEGEncoder = new JPEGEncoder(_quality);
			var data:ByteArray = new ByteArray();
			data = encoder.encode(_bmp);

			//バイト配列を返す
			return (data);
		}

		//デコード
		private function Decode(_data:ByteArray, _bmp:BitmapData):void {

			//バイト配列の読み込み
			var loader:Loader = new Loader();
			loader.loadBytes(_data);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, Loaded);

			//読み込みが完了した場合
			function Loaded(e:Event):void {

				//描画
				_bmp.draw(loader);
			}
		}
	}
}

http://www.inazumatv.com/contents/archives/3573

Posted by tmdf|

trackback

http://tmdf.net/blog/20091018_as3_jpg.html/trackback

comments(0)

POST NEW COMMENT

  • name:*
  • e-mail:*

    The content of this field is kept private and will not be shown publicly.
  • website:
  • comment:*

    Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code>
    Lines and paragraphs break automatically.

Photo

PROFILE

森田 考陽 [Takaaki Morita]
Twitter: @tmdf
Other: mtdf.net

Designer / Programmer

RECENT POSTS

MONTHLY ARCHIVES