Изображение как ByteArray в Flex - PullRequest
2 голосов
/ 21 июня 2010

Я хотел бы иметь возможность перемещать изображения во Flex и обратно, конвертируя туда и обратно между ByteArrays.У меня были некоторые проблемы с этим, поэтому я разработал простую тестовую программу, и даже я не могу приступить к работе.Вот код, который я сейчас пробую:

protected function button3_clickHandler(event:MouseEvent):void
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler2);
loader.load(new URLRequest("file:///c:/win.jpg"));
}

private function loaderCompleteHandler2(event:Event):void
{
var loader:Loader = (event.target as LoaderInfo).loader;
var bmp:Bitmap = Bitmap(loader.content);
image1.source = bmp;
myBmpData = bmp.bitmapData;
myByteArray = bmp.bitmapData.getPixels(myBmpData.rect);
}

protected function button4_clickHandler(event:MouseEvent):void
{
    var loader:Loader = new Loader();
loader.loadBytes(myByteArray);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderCompleteHandler);  
}

private function loaderCompleteHandler(event:Event):void
{
var loader:Loader = (event.target as LoaderInfo).loader;
var bmp:Bitmap = Bitmap(loader.content);
image1.source = bmp;
}

Пока процесс идет сверху вниз: нажмите кнопку 3, изображение отобразится, все идет хорошо.Нажмите кнопку 4, и я получаю сообщение «Ошибка № 2044: необработанное IOErrorEvent:. Text = Ошибка № 2124: загруженный файл неизвестного типа».после строки "loader.loadBytes (myByeArray);"в функции button4_clickHandler.Насколько я могу судить, я использую все по назначению.Я был бы очень признателен за любые предложения, чтобы заставить меня двигаться в правильном направлении.Спасибо!

Ответы [ 2 ]

1 голос
/ 07 июля 2010

Проверьте следующий код:

 var l:URLLoader = new URLLoader(new URLRequest("/path/to/image"));
 l.dataFormat = URLLoaderDataFormat.BINARY;
 l.addEventListener(Event.COMPLETE, loaded);

 private function loaded(event:Event):void
 {
     var ba:ByteArray = event.currentTarget.data as ByteArray;

     b64Img.source = Base64.encode(ba); 
 }

Объект b64Img , для которого я установил свойство source , является Base64Image, который является частью FlexLib проект.Итак, по сути, вы делаете следующее:

  • Загрузка изображения в виде двоичного потока
  • Base64, кодирующая байты
  • Отображение его наэкран

ура

0 голосов
/ 02 февраля 2014

Приведенное выше решение Дэнни Копинга должно работать, и URLLoader должен работать лучше, чем Loader.load ().

Но тогда использование Base64Image ИМХО не оптимально. Внутренне Base64Image использует Loader.loadBytes и предварительно декодирует Base64 - так эффективно, существует кодирование в Base64, за которым следует декодирование.

Я предлагаю просто использовать метод Loader loadBytes следующим образом:

private function loaded(event:Event):void
{
  var loader:Loader = new Loader();
  loader.loadBytes(event.currentTarget.data as ByteArray);     
}

Я не знаю, как вообще избежать использования Loader.

...