以下のAS3コードを使用して、cameraUIを介して写真を撮ります。Androidではすべて正常に動作しますが、iPadでテストすると、保存した画像を読み込もうとするとエラーが発生します。ioErrorHandler1は以下を返します。
ioErrorHandler:[IOErrorEvent type = "ioError"bubbles = false cancelable = false eventPhase = 2 text = "Error#2124:ロードされたファイルは不明なタイプです。URL:app-storage:/myImage.jpg" errorID = 2124]
誰もが理由を知っていますか?(前述のように、Androidで動作します)。コードは次のとおりです。
function imageCaptured( event:MediaEvent ):void
{
trace( "Media captured..." );
var imagePromise:MediaPromise = event.data;
dataSource = imagePromise.open();
if( imagePromise.isAsync )
{
trace( "Asynchronous media promise." );
eventSource = dataSource as IEventDispatcher;
imageLoader = new Loader();
imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded );
imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError );
imageLoader.loadFilePromise( imagePromise );
}
else
{
trace( "Synchronous media promise." );
imageLoader.loadFilePromise( imagePromise );
showMedia( imageLoader );
}
}
function asyncImageLoaded( event:Event ):void
{
readMediaData();
}
function readMediaData():void
{
var image:Bitmap = Bitmap(imageLoader.content);
var bitmap:BitmapData = image.bitmapData;
image.width = 100;
image.height = 100;
this.addChild(image);
var imageBytes:ByteArray = new ByteArray();
dataSource.readBytes( imageBytes );
var file:File = File.applicationStorageDirectory.resolvePath("myImage.jpg");
// create a file stream
var fs:FileStream=new FileStream();
// open the stream for writting
fs.openAsync(file, FileMode.WRITE);
// write the string data down to the file
fs.writeBytes(imageBytes);
// ok close the file stream
fs.close();
fs.addEventListener(Event.CLOSE,function(event:Event):void {
var mLoader=new Loader();
var mRequest:URLRequest = new URLRequest(file.url);
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (event:Event):void{
showMediaLoad(mLoader);
});
mLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler1);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
mLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
mLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
mLoader.load(mRequest);
})
trace("saved");
}