android 位图不为空,但总是出现空指针异常

android bitmap not null but always make nullpointerexception

我正在为 android 实施 topcode + 为 android 实施 opencv。 topcode 用于获取屏幕中的标记位置。 在顶码中,扫描方法只接受位图参数。 所以我将垫子转换为位图。

这是我的代码

private Scanner scanner;
private List<TopCode> codes;
//..........................
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    // TODO Auto-generated method stub
    mRgb = inputFrame.rgba();

    Bitmap bmp = Bitmap.createBitmap(mRgb.cols(), mRgb.rows(),Bitmap.Config.ARGB_8888);


    try {
            Utils.matToBitmap(mRgb, bmp,true);

            if(bmp != null){


                codes = scanner.scan(bmp); ----> this giving null

            }


        } catch(Exception e) {

            e.printStackTrace();

    }

return mRgb;
}

这是错误日志

java.lang.NullPointerException
at com.example.ar.MainActivity.onCameraFrame(MainActivity.java:155)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:387)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:328)
at java.lang.Thread.run(Thread.java:841)

我不知道现在该怎么办。请帮助我。

您必须初始化扫描仪。你的 bmp 没有问题,你已经在你的 if 语句中检查过了。您可以像这样初始化它:(只需在 try catch 语句之前添加此行)

Scanner scanner = new Scanner(System.in);

试试下面的代码

private Scanner scanner;
private List<TopCode> codes;
//..........................
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    // TODO Auto-generated method stub
    mRgb = inputFrame.rgba();

    Bitmap bmp = Bitmap.createBitmap(mRgb.cols(), mRgb.rows(),Bitmap.Config.ARGB_8888);


    try {
            Utils.matToBitmap(mRgb, bmp,true);

            if(bmp != null){
               if(scanner ==null)
                scanner = new Scanner(System.in);

                codes = scanner.scan(bmp);

            }


        } catch(Exception e) {

            e.printStackTrace();

    }

return mRgb;
}