我的应用程序使用SurfaceView
向用户显示图像,并让他们操作已拍摄图像顶部的贴纸。为了减少内存使用量,我已将所有这些位图缩放到适合屏幕的范围内。现在我想保存用户刚刚放上所有贴纸的图像,我想用原始图像的分辨率保存它。如果不将全尺寸图像加载到内存中并冒OutOfMemoryError
的风险,怎么办呢?我不知道从哪里开始,使用给定的工具似乎是一项不可能完成的任务。
答案 0 :(得分:1)
我会执行以下操作:您必须将编辑和合成分离。在编辑中,您可以在一些POJO中保存用户想要的内容(例如,位置X处的贴纸编号A,旋转R处的Y) 然后在合成步骤中使用高分辨率图像 - 但只能一个接一个地节省内存。 在最坏的情况下,如果仍然遇到内存限制,则必须使用磁贴。
答案 1 :(得分:1)
如果您想保存位图而不缩小它。有两种选择。
示例代码
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)