Quando si utilizza l'app della fotocamera in Android, come posso restituire l'intera immagine anziché solo la miniatura?

StackOverflow https://stackoverflow.com/questions/4854517

  •  27-10-2019
  •  | 
  •  

Domanda

Sto realizzando un'app che invia un'immagine scattata dall'app della fotocamera, tuttavia l'immagine che restituisce sembra essere solo una miniatura come posso farla girare l'intera immagine?

Il seguente codice ottiene un'immagine, ma è troppo piccolo.

public class OnTheJobActivity extends Activity{

 private static final int CAMERA_PIC_REQUEST = 1337;
 private Button takePictureButton;
 private Button sendPictureButton;
 private Bitmap thumbnail; 

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  this.setRequestedOrientation(
          ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  setContentView(R.layout.onthejob);
  takePictureButton = (Button) findViewById(R.id.takePictureButton);
  takePictureButton.setOnClickListener(takePictureButtonListener);
  sendPictureButton = (Button) findViewById(R.id.sendPictureButton);
  sendPictureButton.setOnClickListener(sendPictureButtonListener);


 }

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
     if (requestCode == CAMERA_PIC_REQUEST) {  
  thumbnail = (Bitmap) data.getExtras().get("data");  
  ImageView image = (ImageView) findViewById(R.id.photoResultView);  
  image.setImageBitmap(thumbnail);
  sendPictureButton.setVisibility(Button.VISIBLE);
     }  
 }  


 private OnClickListener takePictureButtonListener = new OnClickListener() {

  @Override
  public void onClick(View arg0){
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  

  }
     };

     private OnClickListener sendPictureButtonListener = new OnClickListener() {

  @Override
  public void onClick(View arg0){

      Intent i = new Intent(Intent.ACTION_SEND);
      i.putExtra(Intent.EXTRA_EMAIL, "abc@gmail.com");
      i.putExtra(Intent.EXTRA_SUBJECT,"On The Job");
      i.putExtra(Intent.EXTRA_STREAM, thumbnail);
      i.setType("image/bmp");
      startActivity(Intent.createChooser(i,"Emailfile"));

  }
     };


}
È stato utile?

Soluzione

Prova a utilizzare l'implementazione mostrata qui

In particolare:

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

    public void onPictureTaken(byte[] imageData, Camera c) {

    }

};

Altri suggerimenti

Potresti anche cambiare l'intento che stai usando.

//in your buttonListener
ContentValues values = new ContentValues();
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//create new Intent
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

try{
    startActivityForResult(i, ACTIVITY_GET_IMAGE);
}
catch(Exception ex){
    Log.v("BRE", ex.toString());
}
//in your activity
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(requestCode == ACTIVITY_GET_IMAGE){
        if(resultCode == RESULT_OK){
            try{String uri = data.getData().toString()}
            catch(NullPointerException e){//do something}
        }
    }
}

Ciò restituirà un URI che puoi quindi utilizzare per accedere all'immagine completa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top