Cargar imágenes grandes en mapa de bits?
Estoy tratando de hacer una aplicación básica que muestra una imagen de la cámara, pero cuando intento cargar el BitmapFactory.decodeFile
.jpg desde el sdcard con BitmapFactory.decodeFile
, devuelve null.
No da un error de la memoria que encuentro extraño, pero el mismo código exacto trabaja muy bien en imágenes más pequeñas.
- Incluir OpenCV en el paquete de aplicaciones de Android
- ¿Cómo maneja el android las diferencias entre el tamaño de vista previa y el tamaño real de SufaceView?
- android: Efecto de grabación de imágenes / Animación
- Cuadros de bits en escala de grises en android
- Cómo agregar cuadros a la imagen?
¿Cómo muestra la galería genérica imágenes enormes de la cámara con tan poca memoria?
- Android Reconocimiento facial y obtener caras similares de la base de datos
- Android: Crash after Image Crop cuando se actualiza la versión del sistema operativo a 5.1.1
- Imagen de círculo con texto
- Acceder a imágenes y video ordenados en el mismo cursor
- Enviar una imagen codificada en base64 al servidor mediante HttpUrlConnection Android
- Cómo agregar una foto en una posición deseada de un marco?
- Visualización de la imagen desde la base de datos sqlite con el cursor en android
- Binarizar imagen en Android
Intente establecer inSampleSize como se muestra en este ejemplo .
Puedes seguir este increíble tutorial
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
Bueno, después de trabajar mucho me enteré de que el problema no era con el código, pero el tamaño de empuje de emulador, la edición avd y el aumento de tamaño de RAM resuelve todos los problemas y salva fotos huges fácilmente. Gracias.
enviar:
BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, o); int REQUIRED_SIZE = 640; int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while(true) { if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) break; width_tmp /= 2; height_tmp /= 2; scale *= 2; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2); ByteArrayOutputStream bs2 = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 90, bs2); getIntent().putExtra("byte_picture", bs2.toByteArray());
Recive
Bitmap photo = BitmapFactory.decodeByteArray(data.getByteArrayExtra("byte_picture"),0,data.getByteArrayExtra("byte_picture").length);
Esta es otra solución que utiliza inSampleSize y determina dinámicamente la resolución de la imagen para usar basada en la memoria disponible:
http://bricolsoftconsulting.com/handling-large-images-on-android/
- Contraseña de protección de mi aplicación Android (la forma más sencilla)
- Android recibe respuesta después de 403 en HttpClient