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? - Sí , 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)