bitmap.getPixels()上的NullPointerException

时间:2014-03-24 03:08:42

标签: android bitmap nullpointerexception

有人能帮助我吗?我一直收到NullPointerException错误。

03-23 22:50:43.519: E/AndroidRuntime(1978): java.lang.NullPointerException
03-23 22:50:43.519: E/AndroidRuntime(1978):     at         android.graphics.Bitmap.checkPixelsAccess(Bitmap.java:1365)
03-23 22:50:43.519: E/AndroidRuntime(1978):     at  android.graphics.Bitmap.getPixels(Bitmap.java:1310)
03-23 22:50:43.519: E/AndroidRuntime(1978):     at com.example.ocrtry.Entry2.downSample(Entry2.java:227)
03-23 22:50:43.519: E/AndroidRuntime(1978):     at com.example.ocrtry.MainActivity$1.onClick(MainActivity.java:42)

我尝试在downSample上放置一个try和catch语句,我甚至都得不到输出。 这是downSample的代码

public void downSample()
{
  int w = bmInput.getWidth();
  int h = bmInput.getHeight();
  int[] pixels = null;
  bmInput.getPixels(pixels, 0, w, 0, 0, w, h);
  pixelMap = (int[])pixels;
  findBounds(w, h);

  SampleData data = sample.getData();

  ratioX = (double) (downSampleRight - downSampleLeft)
  / (double) data.getWidth();
  ratioY = (double) (downSampleBottom - downSampleTop)
  / (double) data.getHeight();

  for (int y = 0; y < data.getHeight(); y++)
  {
     for (int x = 0; x < data.getWidth(); x++)
     {
     if (downSampleQuadrant(x, y))
       data.setData(x, y, true);
     else
       data.setData(x, y, false);
     }
 }
}

1 个答案:

答案 0 :(得分:3)

问题是downSample()来电

bmInput.getPixels(pixels, 0, w, 0, 0, w, h);

使用null pixels数组。

您需要分配数组,并使其成为合适的大小。

int[] pixels = new int[w * h];

如何调试这样的案例:堆栈跟踪显示从Bitmap.getPixels()调用的downSample()中检测到的问题。这意味着代码的相关行是它调用getPixels()的位置(您也可以通过堆栈跟踪中的行号Entry2.java:227来判断)。如果bmInput为null,则会尝试调用getPixels()方法的NPE。 (实际上,它会在方法的第一行抛出一个NPE,试图调用bmInput.getWidth()。)因此pixels是唯一可以为null的剩余值。然后在代码中先前查找一行,它将bmInput设置为null。