Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   загрузка xml с помощью FileReference() (http://www.flasher.ru/forum/showthread.php?t=137586)

Flasher_as3 17.03.2010 14:42

загрузка xml с помощью FileReference()
 
Добрый день! Я недавно нашел пример где показано как загружать и сохранять картинки на локальном диске!
Программка класс!Я захотел ее немного переделать:что бы можно было загружать вместо картинок - 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;
 }
 
}
 
}


Wolsh 17.03.2010 20:51

Так
Код AS3:

package
{
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.net.FileReference;
        import flash.net.FileFilter;
 
        public class XMLFile extends EventDispatcher
        {
                public static const XML_LOADED :String = "icon_load_complete";
                private var _ref  :FileReference;
                private var _data  :XML;
 
                public function XMLFile() { super(); }
 
                public function openXMLFile():void
                {
                        if (_ref)
                        {
                                _ref.cancel();
                        }
                        _ref = new FileReference();
                        _ref.addEventListener(Event.SELECT, onFileSelect);
                        var filterArray:Array = [new FileFilter("Файлы XML", "*.xml")];
                        _ref.browse(filterArray);
                }
                private function onFileSelect(event:Event):void
                {
                        _ref.addEventListener(Event.COMPLETE, onFileLoadComplete);
                        _ref.load();
                }
                private function onFileLoadComplete(evt:Event):void
                {
                        _ref.removeEventListener(Event.SELECT, onFileSelect);
                        _ref.removeEventListener(Event.COMPLETE, onFileLoadComplete);
                        _data = new XML(evt.target.data);
                        dispatchEvent(new Event(XMLFile.XML_LOADED));
                }
                public function get data():XML { return _data };
        }
 
}

usage
Код AS3:

var xml:XMLFile = new XMLFile();
xml.addEventListener(XMLFile.XML_LOADED, onLoad);
xml.openXMLFile();
}
 
private function onLoad(event:Event):void
{
        trace(event.target.data);
}


Flasher_as3 18.03.2010 18:22

Спасибо за помощь с кодом!
С Уважением!


Часовой пояс GMT +4, время: 00:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.