【发布时间】:2015-12-08 16:59:18
【问题描述】:
我让用户从他们的图库中检索 4 张图片,在每张图片被选中后,我将其绘制到画布上,然后将图片压缩成图片。
这就是我存储检索到的图像的方式(最多完成四次):
if (mImageIndex == 0) {
bmImages[0] = Bitmap.createBitmap(BitmapFactory.decodeFile(imgDecodableString));
mImageSelected = true;
Toast.makeText(this, "Image One Added", Toast.LENGTH_LONG).show();
}
这就是我组合图像的方式:
result = Bitmap.createBitmap(bmImages[0].getWidth() * 2, bmImages[0].getHeight() * 2, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
for (int i = 0; i < bmImages.length; i++) {
canvas.drawBitmap(bmImages[i], bmImages[i].getWidth() * (i % 2), bmImages[i].getHeight() * (i / 2), paint);
bmImages[i].recycle();
}
它在我的 Samsung Galaxy Tab 4 上运行良好,但在我的 Samsung Note 5 上出现 OutofMemory 错误,它说它试图使用 12,000,000 中的 256,000,000。
这是我的错误:
12-08 10:06:41.021 31308-31308/com.jaymalabs.pic E/AndroidRuntime: java.lang.OutOfMemoryError: Failed to allocate a 253956108 byte allocation with 12059120 free bytes and 11MB until OOM
12-08 10:06:41.021 31308-31308/com.jaymalabs.pic E/AndroidRuntime: at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
尝试在此行创建我的位图时会发生这种情况:
result = Bitmap.createBitmap(bmImages[0].getWidth() * 2, bmImages[0].getHeight() * 2, Bitmap.Config.ARGB_8888);
如何在不占用大量内存的情况下合并图像?
【问题讨论】:
-
请提供minimal, complete, and verifiable example 证明您的问题。这将包括您用于“从他们的画廊中检索 4 张图像并在每一张被选中后,我将其绘制到画布上然后将图像压缩成图像”的代码。这还将包括显示您的
OutOfMemoryError的完整堆栈跟踪。 -
对不起。我已经用更多信息更新了它。我也尝试过使用“Bitmap.Config.RGB_565”,但仍然出现 OutOfMemoryError。
标签: android bitmap android-image android-memory