2012-05-17 17 views
5

私は真剣にどこでも見てきましたが、解決策を見つけることができません。 私のアプリは、iOSとAndroidの両方の許可されたキャッシュの場所にUTFバイトを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(); 

UPDATEは -

//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-creatate-a-wallpaper-using- as3-only /あなたはどこを見ていましたか? – mrpyo

+0

両方の助けをありがとうが、それでも動作しません。 ファイルサイズが異なる3つのファイルを3回保存しますが、画像は表示されません。 addchildはコメントを外しても機能しますので、ビットマップにはデータがあります。 私のコードは元の質問になりました – atomicDroid

答えて

1
に答えあなたは、デバイスのキャッシュへの書き込みやファイルサイズよりスピードをより懸念しているしている場合、あなたが使用して検討するかもしれない:

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

真fastCompression =なし、エンコーダをPNG形式はJPEGエンコーダ

よりも低速であることに注意してください

as3 pngエンコーディングのパフォーマンスに関する詳細情報here

上記以外のスピード(エンコードとデコードの両方)が必要な場合は、ビットマップデータを元のフォーマットで書き込むことができます。画像のサイズを埋め込み、キャッシュの表示を簡単にしたい場合はbmpのようになります

ちなみに、最初にビットマップを再エンコードする必要があるかどうかはわかりません。 ビットマップが既にローダーから来ているようです。_loader.contentLoaderInfo.bytesは、あなただけのファイルのByteArrayを取得する必要があります既にエンコードされているはずですが、既に圧縮されている可能性のあるファイルに対して損失のある圧縮を行わないようにします。

関連する問題