Я загружаю изображение из 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);
trace("readMediaData " + dataSource.bytesAvailable);
к вашей функцииreadMediaData
? - person Brian   schedule 19.12.2014trace("ORIENTATION: "+ getOrientation(exif.ifds.primary));
Есть идеи, как исправить ошибку? - person Tom   schedule 19.12.2014dataSource
. Как вы получаете данные exif?trace()
вreadMediaData
никогда не должно выполняться. - person Brian   schedule 19.12.2014trace("ORIENTATION: "+ getOrientation(exif.ifds.primary));
Вывод правильный, но появляется ошибка «Обнаружен конец файла. Любые идеи? - person Tom   schedule 19.12.2014