【问题标题】:Out of Memory Bitmap Decode File - Android内存不足位图解码文件 - Android
【发布时间】:2017-04-05 09:11:11
【问题描述】:

我在here 发现了同样的问题,我不知道现在是否有解决方案。 我有一个 2592x1944 像素的位图图像,当我运行 Bitmap.decodeFile(...) 时,应用程序崩溃会导致 OutOfmemory 异常。

有人知道怎么解决吗?

非常感谢

在我的代码下面:

for (int iFile = 0; iFile < files.length; iFile++) {
     if (files[iFile].exists()) {
         bitmap = BitmapFactory.decodeFile(files[iFile].getAbsolutePath());
         int[][][] rgb = Utils.getImageRgb(bitmap);

         indexLastFile = iFile + 1;
         images.put("M" + (iFile + 1), rgb);
      }
}

【问题讨论】:

  • 不要对大文件使用Bitmap decode。我记得由于性能问题,使用 Bitmap 调整大小真的很痛苦。 OutOfmemory 是它的阴暗面之一
  • 非常感谢您抽出宝贵时间,但我应该怎么做而不是使用 Bitmap.decodeFile()?
  • 改用imageloaders。我个人更喜欢 Glide。
  • 你能给我一个使用这种方法的例子吗?
  • 你解码位图解码的方法并发布你的代码'

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


【解决方案1】:

如果您真的只想要位图,请尝试有效地加载图像,您需要在将图像加载到内存之前对图像进行缩放。

https://www.youtube.com/watch?v=12cB7gnL6po关注此视频系列以高效加载位图。

【讨论】:

  • 没有人。我不想缩放图像,因为缩放是平均像素,我需要所有像素
  • 您能解释一下为什么您需要不丢失像素的位图,以便我们为您提供更好的解决方案吗??
  • 因为我必须为图像中的每个像素提取 RGB 颜色,所以如果我缩放图像,像素将被移动,我将无法获得相同的输出,所以我必须保持相同的像素
  • 太棒了!但是完全加载位图是非常少的,并且从中取出 rgb 就像将位图在 RAM 中的大小增加一倍,那么您能解释一下为什么需要像素颜色吗??
  • 为了提取一些信息,放置蒙版并获取一些参数,如面积、体积、深度等。我真的需要像素颜色
【解决方案2】:

您应该避免使用位图,否则您将面临 OutOfMemory 异常。

尝试使用图像库 PicassoGlide 以避免内存不足问题和更好的性能。

将路径替换为本地文件夹路径或服务器 url

Glide.with (context).load (path).asBitmap().into(imageView);

【讨论】:

  • 这有什么帮助?具体(Bitmap.Config、目标大小等)
  • 您能否发布您的代码,以便我可以按照您需要的方式更新它
  • @Pehlaj 请发布您的代码如何解码文件而不将其放入 imageView
  • ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filesPath), THUMBSIZE, THUMBSIZE))为什么需要将文件解码为位图?
  • @Pehlaj 我有一个 java 类,它从外部 cam 获取 5MPX 图像并在 RGB 的 map[width][height][3] 中转换它,或者应该这样做。由于此算法必须在 Android 设备中运行,因此需要一个位图,但是当我运行 Bitmap.decodeFile() 时,应用程序崩溃
猜你喜欢
  • 2013-05-08
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 2012-10-10
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多