加載ByteArray在移動應用程序中時,我需要發送用戶使用相機或從相機中選取的圖像。 我使用的八哥框架和feathersUI(雖然我認爲這並不重要的問題)時的MediaPromise使用loadFilePromise我用下面的代碼來處理圖像數據加載 :安全錯誤當試圖從mediaPromise
_mediaLoader = new Loader()
//loading the filePromise from CameraRoll
_mediaLoader.loadFilePromise(_mediaPromise);
_mediaLoader.contentLoaderInfo.addEventListener(starling.events.Event.COMPLETE, onLoadImageComplete);
private function onLoadImageComplete(event:flash.events.Event=null):void {
//creating the starling texture to display the image inside the application
var texture:Texture = Texture.fromBitmapData(Bitmap(_mediaLoader.content).bitmapData, false, false, 1);
//now trying to load the content into a bytearray to send to the server later
var bytes:ByteArray=_mediaLoader.contentLoaderInfo.bytes;
}
最後一行的代碼導致安全錯誤: 錯誤#2044:未處理的SecurityErrorEvent :. text =錯誤#2121:安全沙箱衝突:應用程序:/myapp.swf:http://adobe.com/apollo/[[DYNAMIC]]/1無法訪問。這可以通過調用Security.allowDomain解決。
我試圖
Security.allowDomain("*")
作爲測試 但後來我得到: 的SecurityError:錯誤#3207:應用程序沙箱內容無法訪問此功能。
作爲一種變通方法我寫在裝載機的應用裏面我自己PNG ByteArray將BitmapData使用Adobe的包括PNGEncoder類:
var ba:ByteArray=PNGEncoder.encode(Bitmap(_mediaLoader.content).bitmapData)
但是這需要時間顯著量...
我也嘗試過用於FileReference加載圖像但
_mediaPromise.file
和
_mediaPromise.relativePath
都爲空。
我在做什麼錯?或者這是一個已知的問題?
謝謝!
因爲我沒有真正的answere這個呢,我可以告訴你,我解決了這個問題,在我的最後一個項目,通過使用com.freshplanet.ane.AirImagePicker那裏返回的數據類型的BitmapData的。所以如果你堅持使用你的代碼並且沒有出路,那麼看看這個ANE,它對我很有用。您目前是否在手動請求本地相機應用程序,或者您目前正在使用哪條路線? –
獲取的BitmapData是使用位圖(_mediaLoader.content).bitmapData 獲取原始的ByteArray是問題沒有問題... ... – zantafio
你試過從接收的BitmapData的ByteArray的getPixels用? (請參閱[這是線程](http://stackoverflow.com/questions/27444583/get-a-bytearray-from-bitmapdata-in-as3)) –