-->

Capturing Image from camera and displaying it in a

2020-08-01 05:55发布

问题:

I am developing an application in which i want to capture the image from the camera and display it in another activity in an image view, my problem is that able to capture the image but after capturing i am redirected to first activity instead to second one.

Here is my Code.. PictureOptions.java

public void buttonCameraOpen(View view)
{
    // create Intent to take a picture and return control to the calling application
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

private static Uri getOutputMediaFileUri(int type){
      return Uri.fromFile(getOutputMediaFile(type));
}

/** Create a File for saving an image or video */
private static File getOutputMediaFile(int type){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "Easy Heal");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

 // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     Bitmap selectedphoto   = null;

     super.onActivityResult(requestCode, resultCode, data);

     if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE  && resultCode == RESULT_OK && null!=data) {

            // Image captured and saved to fileUri specified in the Intent
            //selectedphoto = (Bitmap) data.getExtras().get("data");
            Uri selectedImage = data.getData();
             String [] filePathColumn = {MediaStore.Images.Media.DATA};
             Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
             cursor.moveToFirst();   
             int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
             String filePath = cursor.getString(columnIndex);
             File f =new File(filePath);
             String filename = f.getName();
             cursor.close();
             selectedphoto = BitmapFactory.decodeFile(filePath);

             Intent intent = new Intent(PictureOptions.this,ShowImage.class);
             //intent.putExtra("data", selectedphoto);
             intent.setData( selectedImage );
             startActivity(intent);
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
       }

}

PictureOptions.xml

<Button
    android:id="@+id/buttonCameraOpen"
    android:layout_width="fill_parent"
    android:layout_height="72dp"
    android:layout_weight="0.35"
    android:onClick="buttonCameraOpen"
    android:text="@string/button_camera_open" />

ShowImage.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_image);
    ImageView imageview = (ImageView)findViewById(R.id.ImageShow);
    Uri imageUri = getIntent().getData();
    //Bitmap selectedphoto  =(Bitmap)this.getIntent().getParcelableExtra("data");
    imageview.setImageURI(imageUri);
}

ShowImage.xml

 <ImageView
    android:id="@+id/ImageShow"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

回答1:

I finally found an awesome solution This library is used to capture image from camera or select from gallery and return back image in File format in onActivityResult method, which can be used further in the application. Use

EasyImage Library



回答2:

Uri uriSavedImage=Uri.fromFile(new File("/sdcard/flashCropped.png"));
camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(camera, 1);

After clicking the image, check whether it exists or not. Then send the path to the image file to the next activity and display it via Bitmap.



回答3:

Call the camera intent Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); }

then on activity for result use this

'case REQUEST_IMAGE_CAPTURE:
                       Bundle extras = data.getExtras();
                       Bitmap imageBitmap = (Bitmap) extras.get("data");
                       saveBitmap(imageBitmap); 
                       mimageView1.setImageBitmap(imageBitmap);
                       mIntent.putExtra("ACTIVITY_CODE", 1);
                       startActivity(mIntent);
                       break;

the add this method in ur same class

 public void saveBitmap(Bitmap bmp)
    {
        String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +"/DCIM";
          try
          {
            File dir = new File(file_path);
            if(!dir.exists())
               dir.mkdirs();
            File file = new File(dir, "time");
            cameraUrl=file.getAbsolutePath();
            FileOutputStream fOut = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            fOut.flush();
            fOut.close();
          }
          catch (Exception e) {
           Log.e("errr in ","inserting the image at parictular location");
     }
    } 

then call this in ur another activity where u want the image

String valueC = getIntent().getExtras().getString("CAMERA");
         Log.v("imageBitmap", ""+valueC);
         Bitmap yourSelectedImageC = BitmapFactory.decodeFile(valueC);
         mImgV_image.setImageBitmap(yourSelectedImageC);


回答4:

I have same problem after spending 2 days finally i got the anwer

  1. First activity

    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK && data != null) {
            Uri uri = data.getData();
            Intent intent= new Intent(this,SecondActivity.class);
            selfiSrc.putExtra("imgurl", uri );
            startActivity(intent);
        }
    
  2. SecondActivity

    Imageview iv_photo=(ImageView)findViewById(R.id.iv_photo);
    Bundle extras= getIntent().getExtras();
    if(extras!=null)
    {
        path = (Uri) extras.get("imgurl");
        iv_photo.setImageURI(path);
    }
    
    1. Another way see my answer Android - how can i transfer ImageView from one activity to another activity?