2012-01-05 12 views
9

He creado una aplicación de cámara personalizada y estoy tratando de cambiar la resolución de la imagen que se toma. He leído que esto podría depender del teléfono o la versión de Android.Android Camera Set Resolución

Sé que se configuran usando el setParameters pero simplemente no sé cómo configurar la resolución real para que funcione en todos los teléfonos. Quiero que sea algo pequeño ya que mi fuerza de aplicaciones cierra de otra manera. Cuando uso una imagen de prueba a 640x348 esto funciona, así que alrededor de ese tamaño/resolución sería perfecto.

Puede ser más fácil de usar setPictureSize?

public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera = Camera.open(); 
    try { 
      Camera.Parameters parameters = camera.getParameters(); 
      if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.set("orientation", "portrait"); 
       camera.setDisplayOrientation(90); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(90); 
      } else { 
       parameters.set("orientation", "landscape"); 
       camera.setDisplayOrientation(0); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(0); 
      } 
      camera.setParameters(parameters); 
      camera.setPreviewDisplay(holder); 
     } catch (IOException exception) { 
     camera.release(); 
     } 
     camera.startPreview(); 
    } 

Respuesta

16

No hay setResolution(), solamente setPictureSize(). Use getSupportedPictureSizes() en Camera.Parameters para encontrar el tamaño que desea, o use esa información para llenar un ListView o Spinner o algo para que el usuario elija el tamaño deseado. Here is a sample project recientemente actualizado para usar getSupportedPictureSizes() para encontrar la resolución más pequeña admitida y usarla.

+0

Ok cool ¿es posible que me muestres cómo implementar que intenté ejecutar tu código desde github pero acaba de recibir errores de eclipse? – Matt

+0

También verificará el código los tamaños admitidos y luego lo guardará como el más pequeño, o necesita más? – Matt

+0

@Matt: No puedo ayudarte con los "errores del eclipse" si te niegas a decir cuáles son los errores. Y no tengo idea de qué es "más", por lo que no puedo decir si el código lo necesita. – CommonsWare

10

es demasiado fácil para capturar la imagen con alta calidad , aquí se puede establecer su propia resolución :

mCamera = Camera.open(); 
Camera.Parameters params = mCamera.getParameters(); 

// Check what resolutions are supported by your camera 
List<Size> sizes = params.getSupportedPictureSizes(); 

// Iterate through all available resolutions and choose one. 
// The chosen resolution will be stored in mSize. 
Size mSize; 
for (Size size : sizes) { 
    Log.i(TAG, "Available resolution: "+size.width+" "+size.height); 
     mSize = size; 
    } 
} 

Log.i(TAG, "Chosen resolution: "+mSize.width+" "+mSize.height); 
params.setPictureSize(mSize.width, mSize.height); 
mCamera.setParameters(params); 

Hope esto le ayudará a todos.

+0

Hay una lista de resoluciones y puede elegir entre un rango. La resolución más alta se seleccionará si pones un descanso; declaración en el primer hallazgo en este ciclo, y también debe evitar/verificar excepción de tiempo de ejecución y excepción OutOfMemory: if (size.width> = 600 && size.width <= 800) { mSize = size; break; } –

+0

@AbhinavSaxena, sí, incluso podemos elegir cualquiera de ellos según sea necesario. –

+0

Esa no era una consulta sino una solución. He agregado mi solución en los comentarios. Puedes modificar en tu respuesta. Gracias. –