BitmapFactory for java给出OutOfMemory Exception,想要> 12mb ......不知道为什么它太大了

时间:2012-10-01 16:15:55

标签: java android

我的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在运行的不同线程中完全过度工作。

2 个答案:

答案 0 :(得分:3)

  

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

那不是真的。 32bit bitmap将需要width * height * 4个字节才能进行分配。当您不需要时,请记住recycle您的位图。如果你能

,也可以下采样

答案 1 :(得分:1)

请考虑1.2 MB JPEG图像的位图表示可能很容易(取决于其压缩率)超过12 MB。

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

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