我尝试使用一些代码来解码SD中的文件然后进行编辑。由于需要进行此编辑,因此保持较高比例的图像非常重要。有些手机遇到了内存问题,而其他手机在堆中有足够的空间来继续解码而没有设置选项。
//the following is ending a process in which a photo is taken and saved
//under "/sdcard/folder/photo.png"
FileOutputStream fos= new FileOutputStream(photo.getPath());
fos.write(jpeg[0]);
fos.close();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap originalFile = BitmapFactory.decodeFile("/sdcard/folder/photo.png",options);
我基本上在研究是否有办法几乎设置一个if语句将选项放到位(如果需要),否则继续没有它。
答案 0 :(得分:0)
作为一种解决方法,将解码包装到try-catch中,如果发生“内存不足”异常,只需捕获它并尝试使用正确设置的inSampleSize进行解码。 然而,这看起来更像是一个黑客而不是一个解决方案。
基本上,您需要知道解码后的位图将占用多少内存,以及应用程序堆的可用内存现在可以在系统中增长。 首先很容易找到:width * height * 4字节(默认情况下解码在ARGB8888中)。 但我不知道如何获得堆的内存大小。