缩放后保存全尺寸图像的位图

时间:2015-10-12 16:27:06

标签: android image bitmap out-of-memory surfaceview

我的应用程序使用SurfaceView向用户显示图像,并让他们操作已拍摄图像顶部的贴纸。为了减少内存使用量,我已将所有这些位图缩放到适合屏幕的范围内。现在我想保存用户刚刚放上所有贴纸的图像,我想用原始图像的分辨率保存它。如果不将全尺寸图像加载到内存中并冒OutOfMemoryError的风险,怎么办呢?我不知道从哪里开始,使用给定的工具似乎是一项不可能完成的任务。

2 个答案:

答案 0 :(得分:1)

我会执行以下操作:您必须将编辑和合成分离。在编辑中,您可以在一些POJO中保存用户想要的内容(例如,位置X处的贴纸编号A,旋转R处的Y) 然后在合成步骤中使用高分辨率图像 - 但只能一个接一个地节省内存。 在最坏的情况下,如果仍然遇到内存限制,则必须使用磁贴。

答案 1 :(得分:1)

如果您想保存位图而不缩小它。有两种选择。

  1. 在Application标记(Manifest)中使用largeHeap = true。
  2. 如果你能承受一点质量损失!使用。
  3. 压缩位图

    示例代码

    ByteArrayOutputStream out = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 70, out);
        Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
    

    以下是Bitmap类的compress方法文档的链接。 http://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream)