android位图不为null,但始终使nullpointerexception

android位图不为null,但始终使nullpointerexception,android,opencv,bitmap,nullpointerexception,Android,Opencv,Bitmap,Nullpointerexception,我正在为android实现+opencv for android。 topcode用于获取屏幕中的标记位置。 在topcode中,扫描方法仅接受位图参数。 所以我把我的垫子转换成位图 这是我的密码 private Scanner scanner; private List<TopCode> codes; //.......................... public Mat onCameraFrame(CvCameraViewFrame inputFrame) { /

我正在为android实现+opencv for android。 topcode用于获取屏幕中的标记位置。 在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;
}

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

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


请尝试以下代码

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;
}
私人扫描仪;
私人名单代码;
//..........................
CameraFrame上的公用Mat(CvCameraViewFrame输入框){
//TODO自动生成的方法存根
mRgb=inputFrame.rgba();
位图bmp=Bitmap.createBitmap(mRgb.cols()、mRgb.rows()、Bitmap.Config.ARGB_8888);
试一试{
Utils.matToBitmap(mRgb,bmp,true);
如果(bmp!=null){
如果(扫描器==null)
扫描仪=新扫描仪(System.in);
代码=扫描器扫描(bmp);
}
}捕获(例外e){
e、 printStackTrace();
}
返回mRgb;
}

onCameraFrame方法中的155行是什么?code=scanner.scan(bmp);可能bmp不为空,但扫描仪可以为空!你检查过它是否为空吗?你在哪里实例化扫描仪?我不知道如何检查扫描仪。你刚刚解决了我的问题。我真傻,忘了一些基本的东西。哈哈哈。非常感谢。
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;
}