![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Собственно, клиент отправляет на сервер два изображения, одно, которое пользователь в него загрузил, второе - которое пользователь в клиенте обработал. Отправка идет классом MultipartURLLoader, которому оба изображения скармливаются как ByteArray. Со вторым изображением все понятно. Есть желание первое изображение отдавать без обработки.
В случае, когда загрузка идет с компьютера пользователя - вопросов тоже нет. FileReference.data - там как раз изображение в виде ByteArray. Попробовал аналогично решить в лоб с лоадером, но оказалось, что loader.contentLoaderInfo.bytes дает мне битую картинку. Отправляю на сервер, но там она не читается, хотя файл сохраняется. Как по простому отправить изображение транзитом сквозь клиент? Передать на сервер ссылку не подходит, нужно именно грузить изображение. |
|
|||||
|
Битую картинку?
new CrossLoader('http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif').addEventListener(Event.COMPLETE, loadComplete); private function loadComplete(event:Event):void { (event.target as CrossLoader).bitmapData; // psevdo original bitmap data } package me.inpictures.net{ import flash.net.URLRequest; import flash.display.Loader; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.system.Security; import flash.system.LoaderContext; public class CrossLoader extends Bitmap { private var _loader : Loader = null; private var _loaderContent : DisplayObject = null; public function CrossLoader(url:String):void { Security.allowDomain("*"); Security.allowInsecureDomain("*"); _loader = new Loader(); _loader.addEventListener(Event.ADDED, _onAddedToLoader, true, int.MAX_VALUE); _loader.addEventListener(Event.ADDED, _onAddedToLoader, false, int.MAX_VALUE); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onPicLoaded); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _errorHandler); _loader.load(new URLRequest(url)); } private function _onAddedToLoader( e:Event ) : void { if (e.target) { _loaderContent = e.target as DisplayObject; } } private function _onPicLoaded( e:Event ) : void { var bd:BitmapData = (_loaderContent as Bitmap).bitmapData; var bdCopy:BitmapData = new BitmapData(bd.width, bd.height, true, 0x0); bdCopy.draw(bd); this.bitmapData = bdCopy; try { _loaderContent = _loader.content; } catch (exception:Error) { trace("exception: " + exception); } dispatchEvent(new Event(Event.COMPLETE)); } private function _errorHandler(info:IOErrorEvent):void { trace("errorHandler...\n"); } } }
__________________
return this... Последний раз редактировалось AlexCooper; 16.08.2013 в 05:07. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Нет, в битмапдате у меня изображение прекрасно грузится.
Там проблем именно с загрузкой вообще нет. Все на одном сервере. Вот фрагмент кода. Мне нужна функция getImageAsByteArray(). Но, естественно, не через PNGEncoder.encode() или JPGEncoder.encode(). public function load(imageFileURL:String):void { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); loader.load(new URLRequest(imageFileURL), new LoaderContext(true)); } private function imageLoaded(e:Event):void { loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, imageLoaded); loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); // вот тут все в порядке imageBitmap = Bitmap(loader.content); // вот эта функция работает неправильно, возвращаемый // ByteArray не является картинкой imageByteArray = getImageAsByteArray(loader.content); dispatchEvent(new Event(BITMAP_READY)); } private function getImageAsByteArray(image:DisplayObject) : ByteArray { return image.loaderInfo.bytes; } Собственно, судя по всему, там в массиве bytes лежит что-то еще: var bytesTotal1:int = loader.contentLoaderInfo.bytesTotal; var bytesTotal2:int = loader.contentLoaderInfo.bytes.length; var bytesTotal3:int = loader.content.loaderInfo.bytes.length; trace(bytesTotal1,bytesTotal2,bytesTotal3); // 43187 43253 43253 Добавлено через 40 минут Короче, решение оказалось таким: 1. Грузим не через Loader, а через URLLoader как URLLoaderDataFormat.BINARY - получаем картинку в ByteArray 2. Грузим этот массив данных в Loader через loader.loadBytes() - получаем изображение в дисплейлист Последний раз редактировалось mikhailk; 16.08.2013 в 11:55. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|