gpt4 book ai didi

android - 加入大图像时出现 OutOfMemory 错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:32 26 4
gpt4 key购买 nike

我正在使用下面的代码加入两张图片,但它抛出一个 OutOfMemory 错误,我的图片每张大约 1MB。

private Bitmap overlayMark(String first, String second)
{
Bitmap bmp1, bmp2;
bmp1 = BitmapFactory.decodeFile(first);
bmp2 = BitmapFactory.decodeFile(second);
if (bmp1 == null || bmp2 == null)
return bmp1;

int height = bmp1.getHeight();
if (height < bmp2.getHeight())
height = bmp2.getHeight();

Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth() + bmp2.getWidth(), height,
Bitmap.Config.ARGB_8888);// Out of memory
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, 0, 0, null);
canvas.drawBitmap(bmp2, bmp1.getWidth(), 0, null);
bmp1.recycle();
bmp2.recycle();
return bmOverlay;
}

更新: 我尝试了以下两个答案,但仍然无法创建这么大的位图问题是生成的位图在 2400x3200 左右的大小太大,因此内存不足.

如何在不耗尽内存的情况下加入大图像?

最佳答案

无需将图像加载到内存中,您可以使用 inJustDecodeBounds 获取图像的大小。 Bitmap 返回 null,但所有参数都已设置。您可以相应地缩小图像。

如果您的 JPEG 图像每张为 1 MiB,转换为 BMP 确实会占用大量内存。您可以通过图像的尺寸轻松计算出其 BMP 等效值。预计转换如此大的图像确实会崩溃。 Android 将其应用限制为仅 16 MiB VM。

同样使用 RGB_565 而不是 ARGB_8888。

所以你唯一的解决办法是:(a) 使用 BitmapFactory.Options.inSampleSize 缩小图像或者(b) 在没有 16 MiB 限制的情况下使用 Android NDK。

关于android - 加入大图像时出现 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6213690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com