2011-07-15 15 views
5

Tengo un problema con la entrada de la cámara en Android. Después de buscar en internet durante medio día, ya no voy más allá.La pantalla de la cámara no mantiene la relación de aspecto/parece sesgada

Wat Lo que quiero lograr en esta etapa es mostrar correctamente la entrada actual de la cámara. Nada más y nada menos por ahora. Cuando mantiene el dispositivo en modo horizontal, todo parece estar bien. Sin embargo, tan pronto como cambio el dispositivo a retrato, la pantalla parece estar escalada horizontalmente para que coincida con el ancho de la pantalla en el dispositivo.

Con el fin de aclarar esta cuestión un poco más, he adjuntado dos fotografías:

Parece que este problema también se produce con el ejemplo de la cámara los ejemplos API, pero no parece ocurrir cuando uso la aplicación de la cámara desde mi dispositivo. Entonces, claramente, algo más está sucediendo allí.

El código que estoy usando se basa en ejemplos que se pueden encontrar en internet y no tiene modificaciones:

class Preview extends SurfaceView implements SurfaceHolder.Callback { 
    SurfaceHolder mHolder; 
    Camera mCamera; 

    Preview(Context context) { 
     super(context); 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     mCamera = Camera.open(); 
     try { 
      mCamera.setPreviewDisplay(holder); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     mCamera.stopPreview(); 
     mCamera = null; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     Camera.Parameters parameters = mCamera.getParameters(); 
     parameters.setPreviewSize(w, h); 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
    } 
} 

Los ejemplos de la API de hacer uso de un método de "getOptimalPreviewSize (...)" que suena como el método que necesito, pero eso no cambia nada. Lo dejé aquí para ser lo más breve posible.

¿Falta algo obvio o es el comportamiento esperado?

Afortunadamente, alguien puede señalarme en la dirección correcta.

¡Gracias de antemano!

Paul

+0

El efecto de distorsión se vuelva un poco perdido en las imágenes adjuntas. Pero en la imagen del paisaje, la pantalla de la computadora se ve con pantalla ancha. En la imagen vertical, parece una pantalla cuadrada. – PaulT

+0

¿cuál es la resolución de vista previa que está configurando? – bluefalcon

+0

La resolución depende del dispositivo. En este caso, es 1024 x 524 en la pestaña Galaxy. – PaulT

Respuesta

1

Bien, acabo de encontrar la respuesta a mi propia pregunta. La forma en que resolvió que era por ir a pantalla completa con mi solicitud:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

Esto hace un poco de sentido, ya que supongo que no podemos usar cualquier resolución que el tamaño de la vista previa de la cámara. Supongo que ajustará internamente a la relación de aspecto/resolución permitida más cercana y no hace cosas inteligentes como recortar la imagen para que coincida con la resolución solicitada manteniendo la relación de aspecto. En mi caso, estaba mostrando una barra de título mientras que la imagen de origen era a pantalla completa y luego se reducía para que cupiera en la pantalla.

creo que es un poco estúpido que la relación de aspecto no se mantiene y las imágenes no se recortan de forma predeterminada,

+0

sí, he llegado a la misma conclusión ahora. No estoy seguro de por qué la cámara no respetará la relación de aspecto porque quiere ver cómo se ven las cosas a través de la cámara. –

Cuestiones relacionadas