位图的内存不足错误

在运行时,我试图将图像放置在表面视图中。当我尝试使用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

回到顶部