【发布时间】:2017-04-03 09:18:25
【问题描述】:
我在外部存储器中有 100 张图像,我在 for 循环中执行以下两项任务。
- 将每个项目加载为位图并将其与另一个位图合并
- 将结果作为新文件保存在内存中
对于 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 块中。
【问题讨论】:
-
您可以尝试添加缓冲区,即
out = new BufferedOutputStream(new FileOutputStream(imageFileName), 8 * 1024);(也可以尝试更大的大小)是否有任何可衡量的效果。 -
什么是太多时间?请告诉我多少秒。还要告诉文件大小。使用 cpu 的核心并使用线程。每个核心一个线程。或者两个。
-
@greenapps 保存文件是一项昂贵的任务。如果您有任何解决方案,请告诉我,我会告诉您其中的区别。因为数据集不是很重要。
-
@zapl 好的,我会检查的
-
您没有提供我要求的信息。我已经告诉过你一个解决方案。