简体   繁体   中英

Android change image in a ImageView?

I have a picture as a resource, that I need to modify thanks to OpenCV, then I would like to put my new Image in the original ImageView.

I tried this way, but :

public class VerifianceActivity extends Activity {
    /** Called when the activity is first created. */   
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            if (status == LoaderCallbackInterface.SUCCESS ) {
                // now we can call opencv code !

                Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cmc7);
                Mat myMat = new Mat();
                Utils.bitmapToMat(mBitmap, myMat);

                Imgproc.cvtColor(myMat, myMat, Imgproc.COLOR_BGR2GRAY);
                Utils.matToBitmap(myMat, mBitmap);

                ImageView mIV = (ImageView) findViewById(R.id.imageView);
                mIV.setImageBitmap(mBitmap);//NPE
                //this line is suppose to work, but the app crashes.
                setContentView(R.layout.main);

            } else {
                super.onManagerConnected(status);
            }
        }
    };

    @Override
    public void onResume() {;
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5,this, mLoaderCallback);
        // you may be tempted, to do something here, but it's *async*, and may take some time,
        // so any opencv call here will lead to unresolved native errors.
    }
}

Any advice ? I got a NullPointerException as an error

The problem is you need to call

setContentView(R.layout.main);

BEFORE accessing any Views or they will be null such as

 ImageView mIV = (ImageView) findViewById(R.id.imageView);

Since the Views exist inside the layout which you inflate with setContentView() , they don't exist until you inflate that layout so they will return null if you try to initialize them before inflating the Layout

you have to call findViewById after setContentView not before, otherwise the view hierarchy does not exist, and findViewById returns null

  setContentView(R.layout.main);

  ImageView mIV = (ImageView) findViewById(R.id.imageView);
  mIV.setImageBitmap(mBitmap);
  //this line is suppose to work, but the app crashes.

I think you have to do

            setContentView(R.layout.main);

before

            ImageView mIV = (ImageView) findViewById(R.id.imageView);
            mIV.setImageBitmap(mBitmap);

you have to call

setContentView(R.layout.main);

in onCreate(), at least, before trying to call findViewById(..)

i bet, your imageview is null, because it could not find the resource.

ImageView mIV = (ImageView) findViewById(R.id.imageView);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM