【问题标题】:BitmapFactory for java gives a OutOfMemory Exception, wanting > 12mb... Not sure why it is sooo largeJava 的 BitmapFactory 给出了 OutOfMemory 异常,想要> 12mb ...不知道为什么它太大了
【发布时间】:2012-10-01 16:15:55
【问题描述】:

我的 Android 设备的位图工厂出现 OOM 错误。

Out of memory on a 12582928-byte allocation.

这对我来说很奇怪。它非常大。文件本身是平板电脑上的图像罐并下载。所以图像可能会在上限达到 1.2meg jpg 左右。

在它说错误之后,它会吐出 AndroidRuntime 错误日志以显示致命异常:

10-01 11:53:52.512: E/AndroidRuntime(31023): FATAL EXCEPTION: Thread-7893
10-01 11:53:52.512: E/AndroidRuntime(31023): java.lang.OutOfMemoryError
10-01 11:53:52.512: E/AndroidRuntime(31023):    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-01 11:53:52.512: E/AndroidRuntime(31023):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:582)
10-01 11:53:52.512: E/AndroidRuntime(31023):    at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:380)
10-01 11:53:52.512: E/AndroidRuntime(31023):    at com.bentley.cordova.plugins.ImageOps.createThumbnailForPath(ImageOps.java:43)
10-01 11:53:52.512: E/AndroidRuntime(31023):    at com.bentley.cordova.plugins.ImageOps.execute(ImageOps.java:20)
10-01 11:53:52.512: E/AndroidRuntime(31023):    at org.apache.cordova.api.PluginManager$1.run(PluginManager.java:192)
10-01 11:53:52.512: E/AndroidRuntime(31023):    at java.lang.Thread.run(Thread.java:856)

我确实有很多同时使用此功能的图像处理。我认为 BitMapFactory 根本没有因为运行的不同线程而过度工作。

【问题讨论】:

  • 请记住,完全展开的图像比文件中存储的形式占用更多的存储空间。
  • 可能需要看一些代码,甚至不知道你在做什么。但是你检查过递归吗?完成后你会释放资源吗?
  • JPEG 是压缩的,位图不是。打开 alpha 通道后,每个像素需要 4 个字节来存储它。这转换为像素矩阵的 3145732 字节或大致为 1800x1800 像素;如果您尝试处理高清图像,这就是它失败的原因。你能看看你试图创建的维度吗?

标签: java android


【解决方案1】:

所以图像可能会在上限达到 1.2meg jpg 左右。

这不是真的。 32bit bitmap 将需要 width * height * 4 字节才能分配。不需要时记得recycle您的位图。如果可以的话,也可以对其进行下采样

【讨论】:

  • 我在位图的末尾进行了recycle(),但它似乎不是很下采样,在你提到它之后,我进一步研究了它,以及它所需的数据.似乎试图做的是一种缩小尺寸的小方法,这并不是低效的,也没有使用他们可用的 Bitmap.Options。
【解决方案2】:

请考虑一个事实,即 1.2 MB JPEG 图像的位图表示很容易(取决于其压缩率)超过 12 MB。

当使用 32 位颜色时,位图至少需要宽度 * 高度 * 4 个字节来表示。

即使单个实例不超过 12MB 标记,以线程方式运行它也可能超过 JVM 分配的最大堆大小。

【讨论】:

  • 线程可能是一件大事。因为一堆图像可能会变得非常大。我在想,由于图像没有真正降采样,可能会导致问题。
猜你喜欢
  • 2016-11-27
  • 2021-10-19
  • 1970-01-01
  • 2019-07-06
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
相关资源
最近更新 更多