2012-05-17 63 views
5

我認真查看了處處,但無法找到解決方案。 我的應用輕鬆地將UTF字節保存爲iOS和Android允許的緩存位置中的XML文件。AS3/AIR/Mobile - 將位圖保存到文件

但我不能解決如何將Bitmap/BitmapData保存到同一個緩存文件夾中的文件。 創建文件是好的....

_fs.open(_f, FileMode.WRITE); 

//What goes in here to save the Bitmap? 

_fs.close(); 

任何幫助,在此將不勝感激。

感謝

UPDATE:代碼如下...

 _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(); 

更新 - ANSWERED

//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

或http://blog.stroep.nl/2008/09/saving-images-with-air-create-a-wallpaper-using- as3-only /你在找什麼? – mrpyo

+0

感謝您的幫助,但它仍然無法正常工作。 運行3次它可以保存3個不同文件大小的文件,但不顯示圖像... addchild在取消註釋時工作,所以我知道Bitmap有數據。 我的代碼現在在原始問題上 – atomicDroid

回答

1

如果你正在寫的設備緩存和更關心的是速度而不是文件大小,你可以考慮使用:

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

請注意,如果沒有fastCompression = TRUE,PNG編碼器比JPEG編碼器慢

在AS3

更多信息png格式的編碼性能here

如果你需要速度高於一切(對於編碼和解碼),你可以寫你在RAW格式的BitmapData,無頭,如果你已經知道的大小,或基本報頭像bmp,如果你想嵌入圖像大小,並允許更容易查看您的緩存012順便說一句,我不知道爲什麼你需要重新編碼位圖: 看起來位圖已經來自一個Loader,所以_loader.contentLoaderInfo.bytes應該已經得到了你剛纔的文件的ByteArray加載時,它應該已經被編碼,並且將避免在文件上進行有損壓縮,這可能已經被壓縮了。