2012-05-17 10 views
5

Ho cercato seriamente ovunque ma non riesco a trovare una soluzione. La mia app salva facilmente i byte UTF come file XML nelle posizioni cache consentite sia per iOS che per Android.AS3/AIR/Mobile - Salva bitmap su file

Ma non riesco a capire come salvare Bitmap/BitmapData in un file nella stessa cartella di cache. Creazione del file va bene ....

_fs.open(_f, FileMode.WRITE); 

//What goes in here to save the Bitmap? 

_fs.close(); 

Qualsiasi aiuto su questo sarebbe molto apprezzato.

Grazie

UPDATE: codice è il seguente ...

 _smallLogo = Bitmap(_loader.content); 
     //this.addChild(_smallLogo); 

     var jpg:JPGEncoder = new JPGEncoder(100); 
     var bd:BitmapData = new BitmapData(_smallLogo.width, _smallLogo.height); 
     bd.draw(_smallLogo); 
     var ba:ByteArray = jpg.encode(bd); 

     //3 
     _fs.open(_f, FileMode.WRITE); 
     _fs.writeBytes(ba, 0, ba.length);   
     _fs.close(); 

UPDATE - le risposte

//SAVE 
_smallLogo = Bitmap(_loader.content);   
var jpg:JPGEncoder = new JPGEncoder(100); 
var ba:ByteArray = jpg.encode(_smallLogo.bitmapData); 

_fs.open(_f, FileMode.WRITE); 
_fs.writeBytes(ba, 0, ba.length);   
_fs.close(); 

//OPEN 
private function getLogo():void { 
    var ba:ByteArray = new ByteArray(); 

    _fs.open(_f, FileMode.READ); 
    _fs.readBytes(ba);   
    _fs.close(); 

    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData); 
    loader.loadBytes(ba); 
} 

private function getBitmapData(e:Event):void { 
    var decodedBitmapData:BitmapData = Bitmap(e.target.content).bitmapData; 
    var newBMP:Bitmap = new Bitmap(); 
    newBMP.bitmapData = decodedBitmapData; 

    this.addChild(newBMP); 
} 
+0

http://cookbooks.adobe.com/post_Save_a_local_image_file__JPEG_or_PNG__from_an_imag-8406.html – Neil

+0

oppure http://blog.stroep.nl/2008/09/saving-images-with-air-create-a-wallpaper-using- as3-only/Dove stavi guardando? – mrpyo

+0

Grazie per l'aiuto, ma non funziona ancora. Esegui 3 volte salva 3 file con dimensioni di file diverse, ma non visualizza un'immagine ... l'addchild funziona quando non commentato, quindi so che la bitmap ha dati. Il mio codice è ora sulla domanda originale – atomicDroid

risposta

1

se si sta scrivendo alla cache del dispositivo e sono più interessati a velocità oltre la dimensione del file, si potrebbe considerare l'utilizzo di:

bd.encode(bd.rect, new PNGEncoderOptions(true), ba); 

si prega di notare che senza fastCompression = true, png encoder è più lento di codificatore JPEG

più informazioni AS3 png prestazioni di codifica here

Se avete bisogno di velocità superiore a tutti (sia per la codifica e la decodifica) è possibile scrivere si BitmapDatas in formato RAW, senza intestazione, se si conosce già la dimensione, o con un colpo di testa di base come bmp se vuoi incorporare le dimensioni dell'immagine e consentire una visualizzazione più semplice della tua cache

A proposito, io non sono sicuro perché si avrebbe bisogno di ricodificare la bitmap, in primo luogo: sembra la bitmap è già venuta da un Loader in modo _loader.contentLoaderInfo.bytes dovrebbe già ottenere il ByteArray del file appena caricato, dovrebbe essere già codificato ed eviterà di fare una perdita di compressione su un file che è probabilmente già compresso.