有人能帮助我吗?我一直收到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);
}
}
}
答案 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。