Tamaños de imagen compatibles con la cámara Android
Estoy intentando recuperar los tamaños disponibles de la imagen de la cámara, así que puedo ajustar la cámara a mi resolución preferida de la imagen.
Para recuperar el tamaño de la cámara Android he utilizado el código siguiente:
- Cámara en la aplicación de teléfono. Reiniciar la aplicación
- Deshabilitar el cambio de orientación
- Creación de mi propia aplicación de cámara + Captura automática de la imagen
- Com.android.camera.action.CROP alternativa?
- Error de la cámara 100 Detalle
camera=Camera.open(); Parameters params = camera.getParameters(); List sizes = params.getSupportedPictureSizes(); for (int i=0;i<sizes.size();i++){ Log.i("PictureSize", "Supported Size: " +sizes.get(i)); }
Esto me da la siguiente salida, que no estoy seguro de cómo traducir en un tamaño.
"Supported size: android.hardware.Camera$Size@65d4c50" "Supported size: android.hardware.Camera$Size@65d4a70" "Supported size: android.hardware.Camera$Size@3fe4e00" "Supported size: android.hardware.Camera$Size@3fe4cd0" "Supported size: android.hardware.Camera$Size@18f5600" "Supported size: android.hardware.Camera$Size@13f7860"
Si alguien me podría ayudar a entender la salida que me ayudaría mucho, gracias!
Edit: Terminé solucionando mi problema haciendo lo siguiente:
camera=Camera.open(); Parameters params = camera.getParameters(); List sizes = params.getSupportedPictureSizes(); Camera.Size result = null; for (int i=0;i<sizes.size();i++){ result = (Size) sizes.get(i); Log.i("PictureSize", "Supported Size. Width: " + result.width + "height : " + result.height); }
- ¿Cómo saber si la cámara está en uso?
- Android 5.0 Regiones de recorte incorrectas en la superficie de vista previa y capturada imagen fija
- Cámara personalizada Android congelar después del zoom
- Orientación de la cámara en Android
- Uso de la cámara de teléfonos, después de capturar la actividad de la imagen no volver a la actividad particular
- LibGDX - Camera.update () llamada no hace nada
- Unity frente a Android frente a la cámara WTF bug
- SuperficieCreada () Nunca llamado
getSupportedPictureSizes()
devuelve una List
de objetos Camera.Size
. Camera.Size
tiene miembros de datos de height
y width
que le indican la altura y el ancho del tamaño de imagen admitido.
Este es un ejemplo de proyecto que utiliza el getSupportedPreviewSizes()
para encontrar el tamaño de vista previa con el área más grande que es más pequeña que el tamaño de SurfaceView
.
Camera camera = Camera.open(); Parameters params = camera.getParameters(); List sizes = params.getSupportedPictureSizes(); for (int i=0;i<sizes.size();i++) { Log.i("PictureSize", "Supported Size: " +sizes.get(i).width + "height : " + sizes.get(i).height); }
Tienes que tomar la altura y el ancho de un objeto de tamaño
He aquí un ejemplo de cómo buscar el tamaño que aprroaching su tamaño máximo (1024 * 768), por ejemplo.
List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); //searches for good picture quality Camera.Size bestDimens = null; for(Camera.Size dimens : sizes){ if(dimens.width <= 1024 && dimens.height <= 768){ if (bestDimens == null || (dimens.width > bestDimens.width && dimens.height > bestDimens.height)) { bestDimens = dimens; } } } parameters.setPictureSize(bestDimens.width, bestDimens.height); camera.setParameters(parameters);
Esto es lo que acabé haciendo. Dado que el método params.getSupportedPictureSizes()
devuelve una lista de tipo Camera.Size
, fue fácil hacer esto:
List<Camera.Size> sizes = p.getSupportedPictureSizes(); //searches for good picture quality for(Camera.Size dimens : sizes){ if(dimens.width <= 1024 && dimens.height <= 768){ Debug.WriteLine("Width: " + dimens.width + " Height: " + dimens.height); return dimens; } } Debug.WriteLine("Width: " + sizes.get(sizes.size()-1).width + " Height: " + sizes.get(sizes.size()-1).height); //returns the smallest camera size if worst comes to worst return p.getSupportedPictureSizes().get(sizes.size()-1);
Puede obtener una List<Camera.Size>
y recorrerla como cualquier otra lista. Camera.Size
objeto Camera.Size
tiene una propiedad width
y height
.
Declarar su List
esta manera podría ser mejor que emitir cada elemento de la lista para escribir Camera.Size
dentro de un bucle.
En mis dispositivos, si miro a sizes.get(0)
, tendrá la resolución más alta mientras que sizes.get( sizes.size()-1 )
tiene el más bajo. No estoy seguro de si esto es cierto en todos los dispositivos, sin embargo. ¿Alguien tiene conocimiento sobre eso?