tamaño portada medidas imagen cambiar android image camera android-camera

android - medidas - tamaño portada linkedin 2019



Cámara en Android, cómo obtener el mejor tamaño, tamaño de vista previa, tamaño de imagen, tamaño de vista, imagen distorsionada (3)

distorsión de la imagen al mezclar una vista de OpenGL y la cámara de Android para obtener una imagen de ambos al usar el método de toma de fotografías. Revisé y descubrí que la imagen de la cámara estaba configurada en 640X480 y que la vista openGL y la vista previa de la cámara estaban configuradas en 1280x720.

Así que configuré el tamaño de la imagen de la cámara en 1280x720 y el resultado fue perfecto. sin embargo, no puedo establecer el tamaño en el código porque cada dispositivo Android será diferente y cada dispositivo, la configuración para el tamaño de la vista previa y el tamaño de la imagen, debe seleccionarse de una lista de tamaños compatibles.

¿Cuál es la mejor manera de hacer esto teniendo en cuenta que aquí hay tres variables, el tamaño de pantalla del diseño de la actividad, el tamaño de vista previa de la cámara y el tamaño de la imagen?

¿Es mejor usar un match_parent o fitXY para el tamaño de FrameLayout y solo trabajar con dos variables, el tamaño de vista previa y el tamaño de la imagen?

observe que varias de las combinaciones de ancho y alto en tamaños de vista previa y tamaño de imagen son las mismas. por ejemplo, 1280 x 720 existe tanto en la vista previa como en la imagen, ¿es el caso siempre que haya coincidencias 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 tableta Android después de la medición, estos son los resultados de las 3 variables utilizadas

Tamaño de la vista de diseño. Grupo en actividad como resultado de la medición.

1280 x 736

tamaños de imagen compatibles

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

tamaños de vista previa admitidos

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


Creo que la mejor manera de obtener el preview size, picture size es que la cámara se configuró para ser compatible con todos los dispositivos Android. Significa que el preview size, picture size la preview size, picture size que decide configurar es apropiado con el formato popular que soportan todos los dispositivos, ej. es 1280x720 etc.

Como en los siguientes códigos, es el ex. lo que utilicé

// 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 depende de la cámara MP. Así que creo que debería usar por defecto si se usa la cámara.


La mayoría de las veces, pero no siempre, existe una correspondencia entre las relaciones de aspecto de la imagen y las relaciones de aspecto de vista previa. Puede estar seguro de que al menos algunos de ellos son relaciones clásicas 4: 3 (por ejemplo, 640x480). El soporte para 16: 9 también está ampliamente disponible.

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

Tenga en cuenta que el tamaño de la pantalla (según se informa en las especificaciones técnicas para la variedad de dispositivos) no siempre está realmente disponible para la visualización de su imagen. Por ejemplo, los menús del sistema, la barra de título, etc. pueden 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. Puede esperar que los desarrollos futuros de Android, por ejemplo, la compatibilidad con la segunda pantalla, hagan que el juego sea aún más interesante .

Por lo tanto, las respuestas a sus preguntas específicas:

¿Es mejor usar un match_parent o fitXY para el tamaño de FrameLayout y solo trabajar con dos variables, el tamaño de vista previa y el tamaño de la imagen? - no

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

Incluso si su cámara admite diferentes tamaños de imagen "anchos", la vista previa de 1280x720 y la imagen de 2560x1440 pueden ser la mejor coincidencia, ambas precisamente a 16:9 . Por lo general, la calidad de la imagen en tamaño pequeño no es significativamente mejor que la vista previa en ese mismo tamaño, por lo que puede optar por guardar el cuadro de vista previa si 1280x720 es lo que realmente necesita.

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


Posible algoritmo:

1) obtener la relación de aspecto del área de salida (= ancho / alto)

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

Elija la más grande con una relación de aspecto cercana (+ - 5%, por ejemplo) Si no hay nada cerca o una resolución demasiado baja, simplemente haga que su superficie (en la que dibuje los marcos) tenga la misma relación de aspecto que el mayor tamaño admitido y céntrela en la vista principal

Sin embargo, hay tamaños de vista previa y tamaños de imagen. Si desea que tengan la misma relación de aspecto, entonces la mejor opción es usar la relación de aspecto del tamaño de la imagen seleccionada en 1) De esta manera, probablemente tendrá que centrar su superficie en la vista principal

Espero que ayude)