2017-04-05 58 views
1

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

你们有谁知道如何解决它?

非常感谢您

这里我下面的代码:

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); 
     } 
} 
+0

不要对大文件使用“位图”解码。我记得因为性能问题,使用位图调整大小真的很痛苦。 'OutOfmemory'是那个黑暗的一面 –

+0

非常感谢你的时间,但是我应该怎么做而不是使用Bitmap.decodeFile()? –

+0

改为使用'imageloaders'。我个人更喜欢滑翔。 – Wizard

回答

0

你应该避免使用位图打,否则你不得不面对OutOfMemory异常。

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

替换本地文件夹路径或服务器URL

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

这有什么用?具体(Bitmap.Config,目标大小等) –

+0

您可以发布您的代码,以便我可以以您需要的方式更新它 – Pehlaj

+0

@Pehlaj请发布您的代码如何解码文件,而无需将其放入imageView中 –

1

路径如果你真的想独自位图,尽量有效地加载图像,你甚至需要将图像加载到RAM内存之前缩放图像。

https://www.youtube.com/watch?v=12cB7gnL6po请按照此视频系列来有效地加载位图。

+0

没有人。我不想缩放图像,因为缩放是一个像素平均值,我需要所有像素 –

+0

你能解释为什么你需要位图而没有像素损失,所以我们可以为你提供更好的解决方案? –

+0

因为我必须为图像中的每个像素提取RGB颜色,所以如果我缩放图像,像素将被移动,并且我将无法获得相同的输出,所以我必须保持相同的像素 –