2012-10-21 14 views
5

Sto utilizzando il codice jengelsma da questo post Capture Image from Camera and Display in Activity per ottenere un'immagine dalla fotocamera.Come rendere Android Camera Intent restituire l'immagine a dimensione intera

Quando ottengo l'immagine restituita è solo piccola e quando provo ad espanderla, perdo immediatamente la qualità dell'immagine.

Suppongo che questa sia solo la dimensione dell'anteprima, ma non sono stato in grado di scoprire per restituire l'immagine grande in quanto è necessario per manipolarla.

Per riferimento il codice è:

package edu.gvsu.cis.masl.camerademo; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MyCameraActivity extends Activity { 
private static final int CAMERA_REQUEST = 1888; 
private ImageView imageView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
    Button photoButton = (Button) this.findViewById(R.id.button1); 
    photoButton.setOnClickListener(new View.OnClickListener() { 

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

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

Qualsiasi aiuto molto apprezzato.

risposta

16

Devi fare un po 'di più per ottenere un'immagine completa, non la passa nell'Intento, ma la memorizza in un file.

per avviare la fotocamera per questo, aggiungere un extra per il vostro intento:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

fileUri = getOutputMediaFileUri(); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

getOutputMediaFileUri assomiglia:

/** Create a file Uri for saving an image or video */ 
private static Uri getOutputMediaFileUri(){ 
    return Uri.fromFile(getOutputMediaFile()); 
} 

/** Create a File for saving an image or video */ 
private static File getOutputMediaFile(){ 
    // 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), "MyCameraApp"); 
    // 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 = new File(mediaStorageDir.getPath() + File.separator + 
     "IMG_"+ timeStamp + ".jpg"); 

    return mediaFile; 
} 

Naturalmente è possibile modificare il metodo che crea il file come più vi piace per modificare la denominazione.

Quindi nel tuo onActivityResult puoi ottenere l'URI sull'immagine semplicemente chiamando getData() nell'intento.

+0

Grazie per il vostro aiuto. Ho usato il tuo esempio di codice, tuttavia questo non sta scrivendo l'immagine in nessun punto del mio dispositivo (S2). Ho cercato il dispositivo per il timestamp senza risultati. Ciò differirà tra i dispositivi? o non lo salva sul dispositivo? – EHarpham

+0

Su onActivityResult i miei dati sono nulli :(E non riesco a utilizzare getData(). – yAnTar

+0

@yAnTar hai scoperto perché? Perché l'immagine è archiviata nella SD, ma i miei dati sono nulli. E getData() restituisce nullpointer. – Diego

2

Iniziamo intenti per fotocamera

private void takeFromCamera() { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
      File exportDir = new File(Environment.getExternalStorageDirectory(), "TempFolder"); 
      if (!exportDir.exists()) { 
       exportDir.mkdirs(); 
      } else { 
       exportDir.delete(); 
      } 
      mTempCameraPhotoFile = new File(exportDir, "/" + UUID.randomUUID().toString().replaceAll("-", "") + ".jpg"); 
      Log.d(LOG_TAG, "/" + UUID.randomUUID().toString().replaceAll("-", "") + ".jpg"); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempCameraPhotoFile)); 
      startActivityForResult(takePictureIntent, REQUEST_CAMERA); 
     } 
    } 

risultato di cattura in onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) { 

     if (requestCode == REQUEST_CAMERA) { 


      if (requestCode == REQUEST_CAMERA) { 
       String filePath = mTempCameraPhotoFile.getPath(); 
       Log.d(LOG_TAG, filePath); 

       /* 
       // extracted file path can be load into imageview for example with Picasso loader 
       Uri uri = Uri.fromFile(new File(mReportImageList.get(position).getUrl())); 
       Picasso.with(mContext) 
         .load(uri) 
         .fit() 
         .centerCrop() 
         .into(ivPhoto);*/ 


      } 
     } 
    } 
}  

nel manifesto

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
Problemi correlati