2012-03-14 26 views
12

Estoy usando la cámara para capturar una imagen. Este es mi código y funciona muy bien:La intención de la cámara devuelve una imagen pequeña

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

mi onActivityResult se ve así:

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
    if (resultCode == RESULT_OK) { 
     Bundle extras = data.getExtras(); 
     Bitmap photo = (Bitmap) extras.get("data"); 
    } 
} 

El problema es, que si bien la imagen tomada por la cámara es de 480 * 800 (estoy usando HTC Desire), ¡el mapa de bits devuelto es solo 194 * 324!

¿Alguna idea de por qué sucede eso y cómo resolverlo?

Gracias!

Respuesta

10

leer esta respuesta para obtener el tamaño de la imagen completa How to capture an image and store it with the native Android Camera


cuando utiliza la lectura Bitmap partir adicional, obtendrá Thumbnail de la imagen

+0

lo he seguido y tengo éxito para almacenar la imagen en la galería. pero la imagen almacenada también con una imagen de baja calidad ... ¿cómo obtener una buena calidad? – Kasnady

0

Si queremos producir una imagen de alta calidad de la Actividad de la cámara no nos ponemos 'T tiene un remedio para guardarlo en un archivo y luego usar:

  1. Así primer lugar como antes tenemos que crear un int estática que será nuestro requestCode:

public static final int CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE = 1777;

  1. continuación disparar de nuevo la intención de iniciar la actividad de resultado:

intención Intención = new Intención ("android.media.action.IMAGE_CAPTURE"); Archivo file = new Archivo (Environment.getExternalStorageDirectory() + File.separator + "image.jpg"); intent.putExtra (MediaStore.EXTRA_OUTPUT, Uri.fromFile (archivo)); startActivityForResult (intento, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE);

Aquí estamos pasando un URI como un extra al intento para guardar la imagen.

  1. Por último vamos a recibir el resultado en onActivityResult:

     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
         { 
          //Check that request code matches ours: 
          if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE) 
          { 
           //Get our saved file into a bitmap object: 
    
           File file = new File(Environment.getExternalStorageDirectory()+File.separator + 
         "image.jpg"); 
           Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700); 
          } 
        } 
    

método decodeSampledBitmapFromFile es:

public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) 
{ // BEST QUALITY MATCH 

    //First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    // Calculate inSampleSize, Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    options.inPreferredConfig = Bitmap.Config.RGB_565; 
    int inSampleSize = 1; 

    if (height > reqHeight) 
    { 
     inSampleSize = Math.round((float)height/(float)reqHeight); 
    } 
    int expectedWidth = width/inSampleSize; 

    if (expectedWidth > reqWidth) 
    { 
     //if(Math.round((float)width/(float)reqWidth) > inSampleSize) // If bigger SampSize.. 
     inSampleSize = Math.round((float)width/(float)reqWidth); 
    } 

    options.inSampleSize = inSampleSize; 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 

    return BitmapFactory.decodeFile(path, options); 
} 

agregar los permisos de cámara relevent el archivo de manifiesto:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Espero que ayude a nadie cómo está buscando la solución. Como funcionó 100% para mí.

Cuestiones relacionadas