Обнаружен конец файла появляется после загрузки изображения из CameraRoll

Я загружаю изображение из CameraRoll с помощью приведенного ниже кода. Я получаю эту ошибку после запуска функции readMediaData(): Error #2030: End of file was encountered at flash.utils::ByteArray/readUnsignedByte()

Я использую Adobe Air 15 и iPhone 6. Пакет EXIF ​​взят отсюда: https://github.com/bashi/exif-as3 Как исправить ошибку? Это мой код:

import jp.shichiseki.exif.*;

var exif;
var mediaPromise:MediaPromise;
var dataSource:IDataInput;
var loader:Loader = new Loader();
var deviceCameraRoll:CameraRoll;

function loadImageFromCameraRoll(e:Event=null):void
{
    trace("loadImageFromCameraRoll");
    deviceCameraRoll = new CameraRoll();
    deviceCameraRoll.addEventListener(MediaEvent.SELECT, onSelected);
    deviceCameraRoll.browseForImage();
}

function onSelected(e:MediaEvent)
{
    trace("onSelected");
    mediaPromise = e.data;
    dataSource = mediaPromise.open();

    if (mediaPromise.isAsync)
    {
        trace( "Asynchronous media promise." );
        var eventSource:IEventDispatcher = dataSource as IEventDispatcher;
        eventSource.addEventListener( Event.COMPLETE, onMediaLoaded );
    }
    else
    {
        trace( "Synchronous media promise." );
    }
}

function onMediaLoaded( event:Event ):void
{
    trace("Media load complete");
    readMediaData();
}



function readMediaData():void
{
    trace("readMediaData");
    loader.contentLoaderInfo.addEventListener( Event.COMPLETE, imageLoaded );
    loader.loadFilePromise(mediaPromise);

    var data:ByteArray = new ByteArray();
    dataSource.readBytes(data);
    exif = new ExifInfo(data);

    trace("ORIENTATION: "+ getOrientation(exif.ifds.primary));
}

function imageLoaded( event:Event ):void
{
    trace("Image loaded asynchronously.");
    holder.addChild(loader );
}

function getOrientation(ifd:IFD):String
{
    var str:String = "";
    for (var entry:String in ifd)
    {
        if (entry == "Orientation")
        {
            str = ifd[entry];
        }
    }
    switch (str)
    {
        case "1" ://normal
            str = "NORMAL";
            break;
        case "3" ://rotated 180 degrees (upside down)
            str = "UPSIDE_DOWN";
            break;
        case "6" ://rotated 90 degrees CW
            str = "ROTATED_LEFT";
            break;
        case "8" ://rotated 90 degrees CCW
            str = "ROTATED_RIGHT";
            break;
        case "9" ://unknown
            str = "UNKNOWN";
            break;
    }
    return str;
}

btnload.addEventListener(MouseEvent.CLICK, loadImageFromCameraRoll);

person Tom    schedule 19.12.2014    source источник
comment
Что вы увидите, если добавите trace("readMediaData " + dataSource.bytesAvailable); к вашей функции readMediaData?   -  person Brian    schedule 19.12.2014
comment
@ Брайан Это 0. Что это значит? Он говорит 0, но я могу получить правильное значение EXIF ​​​​из загруженного изображения с помощью этой строки: trace("ORIENTATION: "+ getOrientation(exif.ifds.primary)); Есть идеи, как исправить ошибку?   -  person Tom    schedule 19.12.2014
comment
Это означает, что вы не можете прочитать какие-либо данные из вашего dataSource. Как вы получаете данные exif? trace() в readMediaData никогда не должно выполняться.   -  person Brian    schedule 19.12.2014
comment
Я получаю данные EXIF ​​через эту строку в функции readMediaData(): trace("ORIENTATION: "+ getOrientation(exif.ifds.primary)); Вывод правильный, но появляется ошибка «Обнаружен конец файла. Любые идеи?   -  person Tom    schedule 19.12.2014


Ответы (1)