Добрый день! Я недавно нашел пример где показано как загружать и сохранять картинки на локальном диске!
Программка класс!Я захотел ее немного переделать:что бы можно было загружать вместо картинок - xml файл...
Я попал в небольшой тупик!Там загрузка идет через Loader (но он загружает только графику)...Если вместо него использовать URLLoader (то там нужно указывать адрес загружаемого файла), а как я смогу узнать адрес файла - ведь его пользователь сам выбирает из окна "олткрыть"?

Код AS3:
package
{
import flash.display.*;
import flash.text.*;
import flash.net.*;
import flash.events.*;
import flash.utils.*;
import com.adobe.images.JPGEncoder;
import flash.geom.*;
import flash.filters.*;
/**
* ...
* @author http://www.murmadillo.tut.su/
*/
public class DocJpgEncoder extends Sprite
{
private var loader:Loader,
file:FileReference,
txt:TextField,
sender:ByteArray,
i:int,
bmd550x400:BitmapData;
public function DocJpgEncoder()
{
txt=new TextField;
file = new FileReference;
// file.browse(getTypes());
file.addEventListener(Event.COMPLETE,onComplete);
file.addEventListener(Event.SELECT,onSelectFile);
//onShowloadDialog();
txt.htmlText = "<a href=\'event:load\'><u>[Загрузить файл]</a>" +
" <a href=\'event:save\'><u>[Сохранить файл 550х400]</a>";
txt.autoSize=TextFieldAutoSize.LEFT;
addChild(txt);//добавить на рабочее поле
txt.filters = [new GlowFilter(0xffffff, 1, 3, 3, 3)];
txt.autoSize=TextFieldAutoSize.LEFT;
addChild(txt);
txt.addEventListener(TextEvent.LINK, txtLinkFunc);
bmd550x400 = new BitmapData(550, 400, true, 0x00000000);
var seed:int = int(Math.random() * int.MAX_VALUE);
var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE;
bmd550x400.perlinNoise(100, 80, 12, seed, false, true, channels, false, null);
}
private function txtLinkFunc(evt:TextEvent):void {
if (evt.text == 'load') {
onShowloadDialog();
}
if (evt.text == 'save') {
onShowSaveDialog();
}
}
//отображение диалога открытия файла
private function onShowloadDialog(event:Event=null):void {
var fileFilter:FileFilter=new FileFilter("Images","*.jpg");
try {
file.browse([fileFilter]);
}
//catch(illegalOperation:IllegalOperationError){
catch (e:Error) {
}
}
//отображение диалога save файла
private function onShowSaveDialog(event:Event=null):void {
var jpgEncoder:JPGEncoder = new JPGEncoder(100);//100 качество
var jpgStream:ByteArray = jpgEncoder.encode(bmd550x400);
var saveFile:FileReference = new FileReference;
try {
saveFile.save(jpgStream,"Lex.jpg");
}
//catch(illegalOperation:IllegalOperationError){
catch (e:Error) {
}
}
//при выборе файла загружаем его
private function onSelectFile(event:Event):void {
try {
file.load();
}
// catch(illegalOperation:IllegalOperationError)
catch (e:Error) {
}
}
private function onComplete(event:Event):void {
//addChild(loader = new Loader);
loader = new Loader;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderContentHandler);
loader.loadBytes(file.data);
loader.y = 20;
}
private function loaderContentHandler(evt:Event):void {
var bitmapData:BitmapData = Bitmap(loader.content).bitmapData.clone();
var sp:Sprite = new Sprite;
var image:Bitmap = new Bitmap(bitmapData);
var myMatrix:Matrix = new Matrix();
var scale:Number;
var scalXY:Object = new Object;
trace('hi');
bmd550x400 = new BitmapData(550, 400, true, 0x00000000);
scalXY = getAutoScale(bitmapData, 550, 400);
myMatrix.createBox(scalXY.scale, scalXY.scale, 0, 0, 0);//scaleX,scaleY,rotation,x,y
bmd550x400.draw(image, myMatrix);
sp.addChild(image = new Bitmap(bmd550x400));
image.x = scalXY.x;
image.y = scalXY.y;
bmd550x400 = new BitmapData(550, 400, false, 0xffffff);
bmd550x400.draw(sp);
addChild(image = new Bitmap(bmd550x400));
addChild(txt);
}
private function getAutoScale(_bm:BitmapData,_w:Number,_h:Number):Object {
var sizeX:Number = _bm.width;
var sizeY:Number = _bm.height;
var scale:Number;
var scalXY:Object = new Object;
var tv:Number = sizeX / sizeY;
trace(tv);
if (tv > 1||tv < 1.3) {//квадрат
scale = _w / sizeX;
scale = scale / tv;
}
if (tv < 1) scale = _h / sizeY;//вертикаль
if (tv >= 1.3) scale = _h / sizeY;//горизонт
scalXY.x = (_w - sizeX * scale) / 2;
scalXY.y = (_h - sizeY * scale) / 2;
scalXY.scale = scale;
return scalXY;
}
}
}