Ver la Versión Completa : Problema con imágenes
fernandinho_90
11/11/14, 22:29:02
Hola,
quiero convertir una imagen a string para enviarlo mediante JSONObject a un servidor. Mi problema es que cuando trato de hacer esto me sale el siguiente error: java.lang.outofmemoryerror. Lo que hago es: una imagen (foto sacada con el celular 8MP) que la dejé en la carpeta drawable, convertirla a Bitmap y luego ésta la paso a string ocupando base64. En cambio este problema no ocurre con la imagen ic_launcher que viene por defecto pero sí con la foto tomada desde el celular ¿alguna solución a esto?
muchas gracias como siempre,
Saludos!
fernandinho_90
16/11/14, 06:34:01
La idea es: desde la app tomar una fotografía con la cámara del celular, guardarla y enviarla a un servidor mediante un JSON. ¿Se puede?
kriogeN
16/11/14, 11:54:35
No puedes convertir una foto de 8 MP directamente a Bitmap, porque te pasará lo que te está pasando, que te quedarás sin memoria.
La máquina virtual de Java sólo gestiona al mismo tiempo entre 30 MB y 50 MB, dependiendo del móvil, si te pasas del tamaño asociado desbordas la memoria y la aplicación se muere. Una foto de 8MP convertida a Bitmap son más de 30 MB.
Soluciones al Bitmap:
1) ¿Para qué quieres mostrar una imagen de 8 MP en el móvil si no se va a apreciar? Comprímela mientras la conviertes a Bitmap.
2) Esta limitación no existe si lo haces con el NDK, así que si aún así quieres mostrar la imagen en 8 MP tendrás que hacerlo con una NativeActivity y programarlo todo con OpenGL. No se si teniendo la imagen direccionada en la memoria de C++ puedes pasarla a un ImageView, pero mucho me temo que en ese caso pasará a ocupar memoria Java y tendrás el mismo problema, pero no se, puedes probarlo.
En cuanto al String en Base64, 3/4 de lo mismo, el String en sí no puede ocupar más de 30 MB. Supongo que la imagen estará en JPEG y no será un RAW puro, en este caso no debería darte problemas, pero si aún así el String con la imagen entera ocupa más del límite de memoria, tendrás que enviarla a "cachos".
fernandinho_90
17/11/14, 02:43:01
No puedes convertir una foto de 8 MP directamente a Bitmap, porque te pasará lo que te está pasando, que te quedarás sin memoria.
La máquina virtual de Java sólo gestiona al mismo tiempo entre 30 MB y 50 MB, dependiendo del móvil, si te pasas del tamaño asociado desbordas la memoria y la aplicación se muere. Una foto de 8MP convertida a Bitmap son más de 30 MB.
Soluciones al Bitmap:
1) ¿Para qué quieres mostrar una imagen de 8 MP en el móvil si no se va a apreciar? Comprímela mientras la conviertes a Bitmap.
2) Esta limitación no existe si lo haces con el NDK, así que si aún así quieres mostrar la imagen en 8 MP tendrás que hacerlo con una NativeActivity y programarlo todo con OpenGL. No se si teniendo la imagen direccionada en la memoria de C++ puedes pasarla a un ImageView, pero mucho me temo que en ese caso pasará a ocupar memoria Java y tendrás el mismo problema, pero no se, puedes probarlo.
En cuanto al String en Base64, 3/4 de lo mismo, el String en sí no puede ocupar más de 30 MB. Supongo que la imagen estará en JPEG y no será un RAW puro, en este caso no debería darte problemas, pero si aún así el String con la imagen entera ocupa más del límite de memoria, tendrás que enviarla a "cachos".
Hola, gracias por responder pero me surgieron algunas dudas:
1) Yo no quiero mostrar la imagen 8 MP en el móvil y quiero que ojalá no pierda su calidad para que ésta se aprecie de la mejor manera en el pc servidor. ¿Si la comprimo, consigo que la imagen no se "deteriore"?¿Cómo la comprimo?
2) ¿Qué es NDK?
3) ¿Algún ejemplo de cómo enviar la imagen a "cachos"? Mi idea es enviar varias fotos (tomadas con el celular) desde la app a un servidor.
Saludos.
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.