<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" addedToStage="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.adobe.images.JPGEncoder;
import mx.controls.Alert;
import spark.components.Group;
import spark.components.Image;
private function init():void
{
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// private variables
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
private var _fr:FileReference;
private var _img:Image;
private function showImage(disObj:DisplayObject):void
{
_img = new Image();
_img.source = disObj;
var con:Group = btn.parent as Group;
con.removeElement( btn );
con.addElement( _img );
btnSave.enabled = true;
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Event Handler
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
protected function button1_clickHandler(event:MouseEvent):void
{
_fr = new FileReference();
_fr.addEventListener(Event.SELECT, onSelected);
var filter:FileFilter = new FileFilter("Images: (*.jpg,*.jpeg,*.gif,*.png)","*.jpg;*.jpeg;*.gif;*.png");
_fr.browse([filter]);
}
private function onSelected(evt:Event):void
{
trace( evt.type );
_fr.removeEventListener(Event.SELECT, onSelected);
_fr.addEventListener(Event.COMPLETE, onCompleted);
_fr.load();
}
private function onCompleted(evt:Event):void
{
_fr.removeEventListener(Event.COMPLETE, onCompleted);
var ld:Loader = new Loader();
ld.contentLoaderInfo.addEventListener(Event.COMPLETE, loadBytesHandler);
ld.loadBytes( _fr.data );
}
private function loadBytesHandler(evt:Event):void
{
var loaderInfo:LoaderInfo = (evt.target as LoaderInfo);
loaderInfo.removeEventListener(Event.COMPLETE, loadBytesHandler);
showImage(loaderInfo.content);
}
private function btnSave_clickHandler(evt:MouseEvent):void
{
var imageData:BitmapData = new BitmapData(_img.width/2, _img.height/2);
var shiftOrigin:Matrix = new Matrix();
shiftOrigin.translate(-_img.x, -_img.y);
imageData.draw(_img, shiftOrigin);
var encodedImage:ByteArray;
// if (_cropStateView.outputFormat == CropStateView.JPEG) {
var jpgEncoder:JPGEncoder = new JPGEncoder(85);
encodedImage = jpgEncoder.encode( imageData );
// }
// else {
// encodedImage = PNGEncoder.encode(imageData);
// }
var fileNameRegExp:RegExp = /^(?P<fileName>.*)\..*$/;
var outputFileName:String = fileNameRegExp.exec(_fr.name).fileName + "_export";
// if (_cropStateView.outputFormat == CropStateView.JPEG) {
outputFileName += ".jpg";
// } else {
// outputFileName += ".png";
// }
_fr.addEventListener(Event.COMPLETE, onSaved);
_fr.addEventListener(IOErrorEvent.IO_ERROR, onSaveIOError);
_fr.save(encodedImage,outputFileName);
}
private function onSaveIOError(evt:IOErrorEvent):void
{
trace(evt.type);
}
private function onSaved(evt:Event):void
{
_fr.removeEventListener(Event.COMPLETE, onSaved);
_fr.removeEventListener(IOErrorEvent.IO_ERROR, onSaveIOError);
Alert.show("저장완료되었습니다.");
}
]]>
</fx:Script>
<s:VGroup width="100%" height="100%" verticalAlign="middle" horizontalAlign="center">
<s:Button id="btnSave" label="saveImage" click="btnSave_clickHandler(event)" enabled="false"/>
<s:Button id="btn" label="click choose image file" click="button1_clickHandler(event)"/>
</s:VGroup>
</s:Application>