位图的内存不足错误
在运行时,我试图将图像放置在表面视图中。当我尝试使用Drawable文件夹中的图像时,出现内存不足错误。在中快速搜索之后,我发现,如果我们从资产文件夹访问图像,将会有所缓解。但仍然在运行时出现内存不足错误。
我已经分析发现,扩展将有助于解决此类与内存相关的问题。问题是我的图像尺寸为1280 x 720,设备尺寸也相同。因此,我觉得缩放不会有任何效果。
由于我们在该社区中拥有专家,如果您能通过一些建议/示例来帮助我解决此类问题,我们将不胜感激。
方案1:
使用Drawable文件夹中的位图。
backgoundImage = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.backgroundhomepage), (int) dWidth, (int) dHeight, true); /***********************************************************************************************************************************************************
1. To get the image from asset library
**************************************************************************************************************************************************************/
public Bitmap getAssetImage(Context context, String filename) throws IOException {
AssetManager assets = context.getResources().getAssets();
InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
Bitmap bitmap = BitmapFactory.decodeStream(buffer);
return bitmap;
}
方案2:
使用资产文件夹中的位图
backgoundImage = Bitmap.createScaledBitmap(getAssetImage(context,"backgroundhomepage"), (int) dWidth, (int) dHeight, true);
回答:
当您的应用超出堆中分配的内存时,就会发生OutofMemory。位图太大,无法放入内存,即堆。在这种情况下,内存不足。您需要缩小位图,然后再使用该位图。为此,请检查下面的链接
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html。
还有一个博客@ http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html(避免内存泄漏)
public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){ try {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
//The new size we want to scale to
final int REQUIRED_WIDTH=WIDTH;
final int REQUIRED_HIGHT=HIGHT;
//Find the correct scale value. It should be the power of 2.
int scale=1;
while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
scale*=2;
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
引用文档
BitmapFactory类提供了几种解码方法(decodeByteArray(),decodeFile(),decodeResource()等),用于从各种来源创建位图。根据您的图像数据源选择最合适的解码方法。这些方法尝试为构造的位图分配内存,因此很容易导致OutOfMemory异常。每种类型的解码方法都有其他签名,可让您通过BitmapFactory.Options类指定解码选项。
解码时将inJustDecodeBounds属性设置为true可以避免内存分配,为位图对象返回null,但设置outWidth,outHeight和outMimeType。此技术使您可以在位图的构造(和内存分配)之前读取图像数据的尺寸和类型。
以上是 位图的内存不足错误 的全部内容, 来源链接: utcz.com/qa/405082.html