2017-04-03 13 views
1

私は外部メモリに100個の画像を持っています。これらの画像は、forループで次の2つの作業を行います。メモリ内androidでのファイル保存のパフォーマンスを向上させる

  1. ビットマップとしてすべての項目のロードと保存を新しいファイルとして結果、別のビットマップ
  2. でそれをマージ

そして100枚の画像のためには時間がかかりすぎます。ビットマップのマージは速く終了しますが、結果をファイルに保存するには時間がかかります。この問題を後押しする方法はありますか?ビットマップをメモリに保存し、ファイルをバッチ保存すると、OutOfMemoryExceptionが発生する可能性があります。

これは私がビットマップをマージする方法である: how to merge to two bitmap one over another

これは私がファイルにビットマップを保存する方法を示します。これらのすべてはAsyncTaskのブロックであることを

 File imageFileFolder = new File(Statics.TEMP_PATH); 
    imageFileFolder.mkdirs(); 
    FileOutputStream out = null; 
    File imageFileName = new File(imageFileFolder, imageName); 
    try { 
     out = new FileOutputStream(imageFileName); 
     imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
     out.flush(); 
     out.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

注意を。

+0

「out = new BufferedOutputStream(new FileOutputStream(imageFileName)、8 * 1024);」というようなバッファを追加するかどうかを試すことができます。 – zapl

+0

時間が長すぎますか?何秒くらいか教えてください。ファイルサイズも教えてください。 cpuのコアを使用し、スレッドを使用します。コアごとに1つのスレッド。または2つ。 – greenapps

+0

@greenapps保存ファイルは高価な作業です。解決策があれば教えてください。違いを教えてください。データセットはそれほど重要ではないためです。 – Aerox

答えて

0

最後に、jpegとしてBitmapを保存するためのソリューションが付属しました。 250k pngのビットマップを保存すると、約500ミリ秒かかりました。 jpeg形式の同じビットマップは約50ミリ秒かかりました。品質は同じではありませんが、品質と性能のトレードオフのようです。

関連する問題