Actionscript3 Flash

JpgEncoderの非同期版やってみた。(前に)

[`evernote` not found]
LINEで送る
Pocket

えっと、実はすごい前に作っていたので今は誰か作っているのかもですが、
adobeのcorelibにある、JpgEncoderの非同期版を作ってみました。

http://www.hi-farm.net/labs/modJPGEncoder.as.zip

ライセンス的に大丈夫だという判断で公開ですが、まずそうでしたらすぐに取り下げますのですみませんが、ご連絡下さい。

使い方は、
1. corelibのJpgEncoder.asを解凍したファイルに差し替えて下さい。

コードではこんな風にして下さい(サンプル:画像保存のAIRアプリ)

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:WindowedApplication xmlns:mx=”http://www.adobe.com/2006/mxml”; layout=”absolute” creationComplete=”initApp()”>
<mx:Script>
<![CDATA[

import com.adobe.images.JPGEncoder;
import flash.events.*;

private var jpg:JPGEncoder;
private function initApp():void
{
btn.addEventListener(MouseEvent.CLICK, clickHandler);
}

private function clickHandler(e:MouseEvent):void
{
//— 
jpg = new JPGEncoder(100);
//— 処理中のイベント
jpg.addEventListener(“progressing”, progressHandler);
//— 処理完了のイベント
jpg.addEventListener(“finished”, finishedHandler);

var bmpdata:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false);
bmpdata.draw(stage);
jpg.encodeAsync(bmpdata);
}

private function progressHandler(e:Event):void
{
var percent:String = new int((jpg.cur/jpg.maxCur)*100).toString() + “%”;
ti.text = percent;
}
private function finishedHandler(e:Event):void
{
ti.text = “convert finished.”;

//– 終了したら、ファイルに保存する。
var f:File = File.desktopDirectory.resolvePath(“out.jpg”);
var fs:FileStream = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeBytes( jpg.ba, 0, jpg.ba.length);
fs.close();
}

]]>
</mx:Script>
<mx:VBox>
<mx:TextInput id=”ti” width=”400″ text=”jpg export test” />
<mx:Button width=”300″ height=”40″ id=”btn” label=”generate desktop/out.jpg” />
</mx:VBox>
</mx:WindowedApplication>

内部的に行っていることは、bytearray形式でBitmapDataを作るときに、同期バージョンはforループでまわしてたのですが、timerでのまわし方に変えた、簡単に言えばそういう事です。

2008年6月1日04:14

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA