我对此问题感到非常疯狂:
每次打开我的应用程序时,我都会收到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);
感谢所有人!!
答案 0 :(得分:1)
试试这个byte[] decodedString = (byte[])Base64.decode(imagen_codificada);
这将直接返回u位数组。现在你可以使用
BitmapFactory.Options options=new BitmapFactory.Options(); //
options.inSampleSize = 8;
缩小你的照片。