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

Save Bitmap of Full Size Image After Scaling

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

我会做以下事情:你必须将剪辑和构图分离。在编辑过程中,您可以在某些 POJO 中保存用户想要的内容(例如,位置 X、Y 处的贴纸编号 A 以及旋转 R) 然后在合成步骤中使用高分辨率图像 - 但只有一张一张以节省内存。 在最坏的情况下,如果您仍然遇到内存限制,则必须使用图块。

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

  1. 在您的应用程序标记(清单)中使用 largeHeap=true。
  2. 如果你能承受一点质量损失!使用压缩位图。

示例代码

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

下面是linkBitmap压缩方法的文档class。 http://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream)