2017-06-22 1 views
-1

J'utilise le code suivant pour capturer l'image de la caméra et la stocker dans les images du répertoire public. Comment utiliser la même image et la définir comme dans ImageView?Comment puis-je utiliser une image capturée à l'aide de l'appareil photo et régler celle-ci sur un ImageView?

public void take_photo(){ 
    if (ActivityCompat.checkSelfPermission(Contact_info.this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(new String[]{Manifest.permission.CAMERA},40); 
     } 
     return; 
    } 
    Intent cameraIntent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (ActivityCompat.checkSelfPermission(Contact_info.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},50); 
     } 
     return; 
    } 
    File pictureDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
    String pictureName = "Image1.jpg"; 
    File imageFile = new File(pictureDirectory, pictureName); 
    Uri pictureUri; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     pictureUri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", imageFile); 

    } else{ 
     pictureUri = Uri.fromFile(imageFile); 
    } 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 

Mon sur le code de résultat activité:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode==RESULT_OK){ 
     if(requestCode==CAMERA_REQUEST){ 
      //Commented since upon using this and trying to save the image in the file, the app crashes giving a null pointer exception 
      //Bitmap cameraImage =(Bitmap) data.getExtras().get("data"); 
      //contact_image.setImageBitmap(cameraImage); 
     } 
    } 
} 

Je ne veux pas savoir comment définir l'image dans une ImageView, je veux savoir comment je peux utiliser l'image qui est prise par le caméra et stocké dans le répertoire téléphonique que l'image dans le ImageView

+0

dans onActivityResult u get un obj de données que vous pouvez obtenir uri et le mettre à votre image souhaitée – santoXme

+0

duplication possible: https://stackoverflow.com/questions/5991319/capture-image-from-camera-and-display-in-activity Vous avez également beaucoup de soutien sur le site officiel du développeur Android: https://developer.android.com/training/camera/photobasics.html – urgas9

+0

Possible copie de [Comment puis-je changer l'image d'un ImageView?] (https://stackoverflow.com/questions/5089300/how-can-i-change-the-image-of-an-imageview) – rene

Répondre

0

essayer dans votre activité pour le résultat

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 
+0

L'application se bloque en donnant une NullPointerException: Tenter d'invoquer la méthode virtuelle 'android.os.Bundle android .content.Intent.getExtras() 'sur une référence d'objet nul –

+0

collez svp votre onactivity pour résultat –

0
public void takePicture() { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     mCapturedImageURI = Uri.fromFile(getOutputMediaFile()); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

     startActivityForResult(intent, 2); 
    } 

    private static File getOutputMediaFile(){ 
     File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "CameraDemo"); 

     if (!mediaStorageDir.exists()){ 
      if (!mediaStorageDir.mkdirs()){ 
       return null; 
      } 
     } 

     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     return new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_"+ timeStamp + ".jpg"); 
    } 

image ensemble de la mcapturedUri obtenue à partir de méthode ci-dessus, je l'espère, vous gérez les autorisations & résultats partie

0

Voici le code de travail complet:

private void dispatchTakePictureIntent() { 
     Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File f = Utils.createImageFile(getContext()); 
     chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
     photoURI = Uri.fromFile(f); 
     startActivityForResult(chooserIntent, REQUEST_PHOTO_CAMERA); 


    } 

    private void checkCameraPermission() { 
     if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) 
        != PackageManager.PERMISSION_GRANTED) { 
       if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) { 

        new AlertDialog.Builder(getContext()) 
          .setMessage(getString(R.string.camera_request_cancelled)) 
          .setPositiveButton(R.string.dismiss, null) 
          .setOnDismissListener(dialog -> requestPermissions(
            new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAMERA)) 
          .show(); 
       } else { 
        requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAMERA); 
       } 
      } else { 
       dispatchTakePictureIntent(); 
      } 
     } else { 
      dispatchTakePictureIntent(); 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
              @NonNull int[] grantResults) { 
     switch (requestCode) { 
      case PERMISSIONS_REQUEST_CAMERA: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        dispatchTakePictureIntent(); 
       } 
      } 
      break; 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     /*if (requestCode == REQUEST_PHOTO_CAMERA && resultCode == getActivity().RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 
      receiptImage.setImageBitmap(imageBitmap); 
      savePhoto(imageBitmap); 

     } 
*/ 
     if (requestCode == REQUEST_PHOTO_CAMERA && resultCode == Activity.RESULT_OK) { 
      if (photoURI != null) { 
       Uri selectedImage = photoURI; 
       getActivity().getContentResolver().notifyChange(selectedImage, null); 
       Bitmap reducedSizeBitmap = Utils.getBitmap(photoURI.getPath()); 
       if (reducedSizeBitmap != null) { 
        receiptImage.setImageBitmap(reducedSizeBitmap); 
        savePhoto(reducedSizeBitmap); 
       } else { 
        Toast.makeText(getContext(), "Error while capturing Image", Toast.LENGTH_SHORT).show(); 
       } 
      } else { 
       Toast.makeText(getContext(), "Error while capturing Image", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    private void savePhoto(Bitmap bitmap) { 
     FileOutputStream outputStream = null; 
     File file = null; 
     try { 
      file = File.createTempFile("photo", null, getContext().getCacheDir()); 
      outputStream = new FileOutputStream(file); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); 
      photoURI = Uri.fromFile(file); 

     } catch (IOException e) { 
     } finally { 
      try { 
       if (outputStream != null) { 
        outputStream.close(); 
       } 
      } catch (IOException e) { 
      } 
     } 

     uploadImage(file); 
    }