编码的byte64图像导致OutOfMemoryError android

时间:2011-12-21 09:44:27

标签: android bitmap out-of-memory

我对此问题感到非常疯狂:

每次打开我的应用程序时,我都会收到OutOfMemoryError。在某些时候,它从服务器中获取图像,但它编码为Base64字符串。

我做的基本上是:

decodedString = Base64.decode(imagen_codificada);

 Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, 
                            decodedString.length); 

但我每次都会得到该死的OOME。

如果试过这个:

BitmapFactory.Options options=new BitmapFactory.Options();
                        options.inSampleSize = 8;

甚至将选项设置为128,什么是疯狂的,但仍然崩溃......

有没有办法在解码之前以某种方式减少编码图像的字符串的大小?我无法直接操作图像,因为它可以用于应用程序和桌面环境中的许多其他内容......

我附上了错误日志:

  

12-21 10:36:27.032:E / dalvikvm-heap(5508):10119168-byte external   分配对于这个过程来说太大了。 12-21 10:36:27.032:   E / dalvikvm(5508):内存不足:堆大小= 5823KB,分配= 4351KB,   位图大小= 720KB,限制= 13692KB 12-21 10:36:27.032:E / dalvikvm(5508):   修剪信息:Footprint = 6343KB,Allowed Footprint = 6343KB,Trimmed = 520KB   12-21 10:36:27.032:E / GraphicsJNI(5508):VM不允许我们分配   10119168字节12-21 10:36:27.192:E / AndroidRuntime(5508):致命   例外:主12-21 10:36:27.192:E / AndroidRuntime(5508):   java.lang.OutOfMemoryError:位图大小超过VM预算

编辑:解决了这个问题:

decodedString = Base64.decode(imagen_codificada);
                    System.gc();
                    BitmapFactory.Options options=new BitmapFactory.Options();
                    options.inSampleSize = 8;
                    InputStream input = new ByteArrayInputStream(decodedString);
                    Bitmap decodedByte = BitmapFactory.decodeStream(input, null, 
                            options); 
                    menu.setNombreApellido(decodedByte);

感谢所有人!!

1 个答案:

答案 0 :(得分:1)

试试这个byte[] decodedString = (byte[])Base64.decode(imagen_codificada);
这将直接返回u位数组。现在你可以使用
BitmapFactory.Options options=new BitmapFactory.Options(); // options.inSampleSize = 8; 缩小你的照片。