2012-06-30 12 views
5

Estoy usando un DroidX para desarrollar una aplicación que utiliza la imagen de vista previa de la cámara. El código que estoy usando se encuentra en numerosos lugares en la web, pero noté que el método común "getBestPreviewSize (width, height, camera.parameters)" devuelve un tamaño tan pequeño que el método decodeYUV420SP estándar falla con excepción de puntero nulo.GetSupportedPreviewSize devuelve anchura y altura inversas

Algunos depuración revela los supportedPreviewSizes para mis DroidX son:

  • 144h x 176 W
  • 240h x 320W
  • 288h x 352W
  • 480h x 640W
  • 480h x 720w
  • 448h x 800w
  • 720h x 1280w

Tenga en cuenta que los valores de altura y ancho dan una perspectiva horizontal. Esto no cambia con la orientación de la cámara. El ancho y la altura de la superficie pasados ​​a getBestSupportedPreviewSizes es 480w x 778h.

Cuando paso los parámetros de la cámara a getBestSupportedPreviewSizes() devuelve un tamaño de 288 x 352. Aquí está el código de llamada - Me disculpo si el formato está apagado, pero aquí está va:

 if (!cameraConfigured) { 
     Camera.Parameters parameters=camera.getParameters(); 
     Camera.Size size=getBestPreviewSize(pwidth, pheight, parameters); 
     if (size!=null) { 
      parameters.setPreviewSize(size.width, size.height); 
      camera.setParameters(parameters); 
      cameraConfigured=true; 
     } 
    } 

pwidth y pheight son de parámetros de ancho y alto de la surfaceChanged de devolución de llamada. He intentado con camera.setDisplayOrientation (90); en onResume(). También puse la orientación ("Retrato") en el manifiesto; ninguna de las 4 combinaciones de estos intentos parece cambiar este comportamiento.

Mis pensamientos son simplemente invertirlos, pero se siente mal en muchos niveles. Como este código disponible libremente parece haber sido probado en muchos otros ejemplos, obviamente me estoy equivocando. ¿Alguien puede proporcionar alguna información sobre este comportamiento?

Gracias de antemano.

Respuesta

3

La manera correcta de pensar acerca de la cámara es en modo apaisado, esto significa que cuando lo piense en modo retrato, el ancho y la altura se sienten "volteados".

La función getBestPreviewSize(w, h, p) es simplemente un envoltorio alrededor de la función getSupportedPreviewSizes() de , por lo que el ancho y la altura que se pasen no cambiarán el resultado de la función bestPreviewSize.

+0

Gracias Daniel. Aunque estoy un poco confundido. Según lo entiendo, pasamos el tamaño de la superficie a getBestPreviewSizes() y devuelve el mejor ancho y alto de ajuste para configurar la previsualización. Entonces, si el ancho es menor que la altura (como en el modo vertical), entonces el ancho devuelto será más pequeño que la altura de la cámara o la altura devuelta será menor que el ancho de la cámara. Entonces no entiendo cómo no afecta el resultado de la función getBestPreviewSize. ¿Qué me estoy perdiendo en mi pensamiento? – bob

+0

La mayoría de los getBestPreviewSizes() fns que he visto en línea solo usan el ancho y alto para encontrar un tamaño de vista previa que sea una buena relación de aspecto. La relación de aspecto es la misma independientemente de si se voltea o no la altura y el ancho. –

+0

¿Respondió esto a tu pregunta? –

Cuestiones relacionadas