De la cámara en Android, cómo conseguir el mejor tamaño, el tamaño de la vista previa, el tamaño de la imagen, vista de tamaño, imagen distorsionada

tener imagen distorsionada cuando se mezcla una vista de OpenGL y el Android de la cámara para obtener una imagen de ambos cuando se utiliza el takepicture método. He comprobado y encontró que la imagen de la cámara se establece en 640X480 y el openGL de vista y la vista previa de la cámara se ponen a 1280×720.

así que me puse la cámara tamaño de la imagen a 1280 x 720 y el resultado fue perfecto. sin embargo no puedo configurar el tamaño en el código debido a que cada dispositivo Android será diferente y cada dispositivo de la configuración de vista previa tamaño y el tamaño de la imagen tiene que ser seleccionado de una lista de tamaños de apoyo.

¿cuál es la mejor manera de hacer esto teniendo en cuenta que hay tres variables, el tamaño de la pantalla de la actividad de distribución, el tamaño de la vista previa de la cámara, y el tamaño de la imagen.

es mejor utilizar un match_parent o fitXY para el FrameLayout tamaño, y sólo se trabaja con dos variables, el tamaño de la vista previa y el tamaño de la imagen?

observe que varios de la anchura y la altura de las combinaciones en la vista previa de tamaños y tamaños de imagen son la misma. por ejemplo 1280 x 720 existe en la vista previa y la imagen, es siempre el caso en que habrá partidos en ambos tamaños?

 List<Size> previewSizes = mCamera.getParameters().getSupportedPreviewSizes();

 List<Size> imageSizes = mCamera.getParameters().getSupportedPictureSizes();

 //layout in the activity that the cameraView will placed in
 int layoutWidth = frameLayout.getWidth();
 int layoutHeight = frameLayout.getHeight();

por ejemplo en una tablet Android después de la medición, estos son los resultados para las 3 variables utilizadas

tamaño de diseño de viewGroup en la actividad como resultado de la medición

 1280 x 736

de imagen soportados tamaños de

 320 x 240
 640 x 480
 1024 x 768
 1280 x 720 << best size in my example to use
 1280 x 768
 1280 x 920
 1600 x 1200
 2048 x 1536
 2560 x 1440
 2560 x 1536
 2560 x 1920  << native resolution of hardware camera

apoyado vista previa de los tamaños de

 176 x 144
 320 x 240
 352 x 288
 480 x 320
 480 x 368
 640 x 480
 800 x 480
 800 x 600
 864 x 480
 864 x 576
 960 x 540
 1280 x 720 << best size in my example to use
 1280 x 768
 1280 x 960
InformationsquelleAutor Kevik | 2014-02-10

3 Kommentare

  1. 14

    Más a menudo, pero no siempre hay una correspondencia entre la imagen de las proporciones de aspecto y vista previa de relaciones de aspecto. Usted puede estar seguro de que al menos algunos de ellos son un clásico 4:3 ratio (por ejemplo, 640 x 480). Soporte para 16:9, también está ampliamente disponible.

    La pantalla puede tener relación de aspecto diferente. A llenar con una imagen de la cámara correctamente, es ampliamente aceptado para agregar márgenes negros (el mismo enfoque se utiliza en YouTube). Alternativamente, usted puede recortar la imagen de la cámara para llenar toda la pantalla.

    Tenga en cuenta que el tamaño de la pantalla (como se informó en las especificaciones técnicas de la gran variedad de dispositivos) no está siempre disponible para su visualización de la imagen. Por ejemplo, el sistema de menús y la barra de título, etc. puede tomar su parte de la pantalla de bienes raíces. El modo inmersivo está disponible en algunos dispositivos, y su comportamiento depende de la versión del sistema. Usted puede esperar que el desarrollo futuro de Android, por ejemplo, el segundo de ayuda de la pantalla, hará que el juego sea aún más interesante.

    Así, las respuestas a sus preguntas específicas:

    es mejor utilizar un match_parent o fitXY para el FrameLayout tamaño, y sólo se trabaja con dos variables, el tamaño de la vista previa y el tamaño de la imagen?no.

    es siempre el caso en que habrá partidos en ambos tamaños?, pero tal vez este tamaño no es el óptimo.

    Incluso si su cámara es compatible con diferentes «distintos» tamaños de imagen, 1280 x 720 vista previa y resolución de 2.560 x 1.440 imagen puede ser el mejor partido, tanto precisamente en 16:9. Generalmente, la calidad de imagen de pequeño tamaño no es significativamente mejor que la vista previa en el mismo tamaño, así que usted puede elegir para guardar el vista previa marco si 1280x720 es lo que realmente necesita.

    Si puede renunciar a takePicture(), su aplicación va a ser mucho más sensible.

  2. 1

    Creo que la mejor manera de conseguir preview size, picture size es la Cámara fue creada para apoyar a todos los dispositivos Android. Esto significa que el preview size, picture size decide configurar es correspondiente con el formato popular de que Todos los Dispositivos compatibles, ex. es 1280×720 etc.

    Como en los siguientes códigos, es el ex. lo he utilizado.

    //start preview with new settings
        try {
            //set preview size and make any resize, rotate or
            //reformatting changes here
            Camera.Parameters parameters = mCamera.getParameters();
    
            for (Camera.Size size : parameters.getSupportedPictureSizes()) {
                //640 480
                //960 720
                //1024 768
                //1280 720
                //1600 1200
                //2560 1920
                //3264 2448
                //2048 1536
                //3264 1836
                //2048 1152
                //3264 2176
                if (1600 <= size.width & size.width <= 1920) {
                    parameters.setPreviewSize(size.width, size.height);
                    parameters.setPictureSize(size.width, size.height);
                    break;
                }
            }
            //Set parameters for camera
            CustomCamera.mCamera.setParameters(parameters);
    
            Camera.Size size = CustomCamera.mCamera.getParameters().getPictureSize();
    
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();
        } catch (Exception e) {
            e.printStackTrace();
        }

    Best size dependen de la Cámara de DIPUTADO. Así que creo que debería usar predeterminado si el uso de la Cámara.

    • Hola amigo, Ur código funcionó, pero, dentro de la condición si tengo que usar otro camino alrededor de si (de tamaño.ancho <= 800) {
    • Hola trabajando bien, pero cuando uso este tamaño de imagen en la vista previa y resultado son diferentes . Le dio más de la imagen que he capturado.
    • .getSupportedPictureSizes() y .getSupportedPreviewSizes() puede ser diferente (más a menudo son)
  3. 1

    Posible algoritmo:

    1) obtener el área de salida relación de aspecto (=ancho/altura)

    2) iterar a través de tamaños admitidos:

    Elegir más grande con cerca de relación de aspecto(+-5%, por ejemplo)
    Si nada de lo que de cerca o de resolución demasiado baja – acaba de hacer yor de la superficie(que puede dibujar los fotogramas a) ser la misma relación de aspecto como de mayor tamaño admitido y centro en la vista principal

    Howewer, hay vista previa de los tamaños de & tamaños de imagen. Si usted desea tener la misma relación de aspecto – entonces la mejor opción es utilizar selecciona el tamaño de imagen relación de aspecto en 1) de Esta manera usted probablemente tendrá que centrar su superficie en la vista principal

    Espero que ayude a)

    • ¿qué significa esto? ratio (=width/height) 2)
    • Relación de aspecto = ancho/altura. Lo que no es obvio?
    • Me perdí en tu ‘2)’ que se acaba de enumerar su punto. 😉
    • «elija el más grande» es que ahora ya no siempre es recomendable ya que esto puede producir 15 Megapíxeles de imágenes que es demasiado para la mayoría de las aplicaciones.
    • depende de la definición de ‘lo mejor de’tamaño de

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea