在手机上测试我的应用程序时,出现内存不足错误,经过一番研究,我发现这是由于我对位图的不当使用所致。最初,我将这样声明一个位图:

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name);


从日志中,我看到了错误源于此。因此,我阅读并尝试使用额外的参数,选项,例如:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;


然后声明位图...

image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name, options);


运行此代码时,我不再遇到内存不足错误,但是当尝试使用位图时,如果试图将它们绘制到画布上,或者调用.getWidth()和.getHeight,我确实会收到空指针异常。 () 在他们。

我很难尝试解决此问题,我们将不胜感激。

错误日志:

01-27 18:47:42.597: E/AndroidRuntime(15698): java.lang.NullPointerException
01-27 18:47:42.597: E/AndroidRuntime(15698):    at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1083)
01-27 18:47:42.597: E/AndroidRuntime(15698):    at android.graphics.Canvas.drawBitmap(Canvas.java:1139)
01-27 18:47:42.597: E/AndroidRuntime(15698):    at com.mascal.petele.Game$OurView.drawMenu(Game.java:654)
01-27 18:47:42.597: E/AndroidRuntime(15698):    at com.mascal.petele.Looping.run(Looping.java:34)


在Game.java:654中,代码行是:

c.drawBitmap(background, 0, 0, null);


这是位图用法的第一次出现,并且彼此之间也是如此。

最佳答案

这是inJustDecodeBounds的文档:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inJustDecodeBounds

这是文本,突出显示了我自己的文本:


  如果设置为true,则解码器将返回null(无位图),但仍将设置out ...字段,以允许调用方查询
  位图,而不必为其像素分配内存。


如您所见,您设置了一个选项来保证您将获得一个空位图!

10-01 08:19
查看更多