2017-04-03 37 views
1

我在外部存储器上有100个图像,我在for循环中执行了以下两个任务。在android中改善文件保存性能

  1. 加载的每个项目为位图,并在内存中

而对于100倍的图像需要花费太多的时间与另一个位图合并它

  • 保存结果作为一个新的文件。合并位图会快速并正常地结束,但将结果保存在文件中需要很长时间。无论如何推动这个问题?保持内存中的位图和批量保存文件可能会导致OutOfMemoryException。

    这是我如何合并位图: how to merge to two bitmap one over another

    我这是怎么保存的位图到文件:

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

    注意,所有这些都是在一个块的AsyncTask。

  • +0

    你可以尝试添加一个缓冲区,即'out = new BufferedOutputStream(new FileOutputStream(imageFileName),8 * 1024);'(尝试更大的尺寸)有任何可测量的效果。 – zapl

    +0

    太多时间了?请告诉几秒钟。同时告诉文件大小。使用cpu的核心并使用线程。每个核心都有一个线程。或者两个。 – greenapps

    +0

    @greenapps保存文件是一项昂贵的任务。如果你有任何解决方案,请告诉我,我会告诉你的差异。因为数据集不是很重要。 – Aerox

    回答

    0

    最后,我提出了将位图保存为jpeg的解决方案。保存一个250k的png位图花了近500毫秒。 jpeg格式的相同位图大约需要50毫秒。尽管质量不会相同,但它看起来是质量和性能之间的折衷。