загрузка изображений и видео в AIR без HTTP - PullRequest
1 голос
/ 02 января 2012

Мне любопытно, какова правильная методология загрузки изображений и видеоданных напрямую из файловой системы без использования HTTP.

Я пишу приложение для создания слайд-шоу AIR, и оно прекрасно работает, но в настоящее время используетна локальном сервере MAMP для передачи приложению всех носителей с помощью стандартных проверенных методик загрузки носителей FLASH.

Я знаю, что поскольку FLASH был разработан как веб-плагин, он лучше всего обрабатывает этот способ получения данных, но мне бы очень хотелось вытащить этот довольно обременительный и ненужный бит и использовать приложение в качестве автономного проигрывателя.Однако мне неясно, что является «правильным» способом загрузки носителя.

У меня есть готовые объекты File, и я дошел до того, что пользователь выбрал локальный каталог, из которого нужно извлечь носитель, и я получаю список файлов (на основе их расширений) изсписок ... но что теперь?

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Сначала вы должны поместить содержимое вашего файла в ByteArray (код из FileStream документации )

var bytes:ByteArray = new ByteArray();
var myFileStream:FileStream = new FileStream();
var myFile:File = File.documentsDirectory.resolvePath("test.jpg");

myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.openAsync(myFile, FileMode.READ);

function progressHandler(event:ProgressEvent):void 
{
    if (myFileStream.bytesAvailable)
    {
        myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable);
    }
    else
    {
        myFileStream.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
        loadImage();
    }
}

Затем вы можете загрузить эти байты в Loader для отображения изображения (см. Метод Loader.loadBytes)

function loadImage():void
{
    var loader:Loader = new Loader();
    loader.loadBytes(bytes);    
    addChild(loader);
}

Приветствия

1 голос
/ 07 февраля 2014

С этим кодом Loader запускает событие Event.COMPLTE, и вы сможете манипулировать с ним растровым изображением:

var bytes:ByteArray = new ByteArray();
var myFileStream:FileStream = new FileStream();
var myFile:File = File.documentsDirectory.resolvePath(YOUR_PATH);

myFileStream.addEventListener(Event.COMPLETE, fileCompleteHandler)
myFileStream.openAsync(myFile, FileMode.READ);

function fileCompleteHandler(event:Event):void 
{
    myFileStream.readBytes(bytes);

    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    loader.loadBytes(bytes);

    function imageLoaded(e:Event):void
    {
        addChild(Bitmap(loader.content));
        myFileStream.removeEventListener(Event.COMPLETE, fileCompleteHandler);
        myFileStream.close();
    }
}

PS: Спасибо, Кадьяк, я сделал мой код на основе вашего.

...