|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Problema imagen pixelada al guardala
Buenas tardes a todos,
A ver si alguien me puede echar una manita.. ![]() tengo un problema cuando recupero una foto de la galería o de la cámara y la guardo en la carpeta de mi aplicación. Una vez guardada, cuando la recupero para visualizarla me aparece la imagen muy pixelada, ha perdido muchísima calidad y la letras son ilegibles. Dejo el código que uso a ver si alguien me puede iluminar un poco. ........... ....... try{ if (requestCode == SELECT_IMAGE) if (resultCode == Activity.RESULT_OK) { Uri selectedImage = data.getData(); if (selectedImage != null) { image_view.setImageBitmap(getScaledBitmap(selected Image)); thumbnail = getScaledBitmap(selectedImage); } } else if (resultCode == Activity.RESULT_CANCELED) { Toast.makeText(getBaseContext(), "Se ha cancelado la seleccion de foto " ,Toast.LENGTH_SHORT).show(); } if(requestCode == TAKE_PICTURE) if(resultCode == Activity.RESULT_OK){ Uri selectedImage = data.getData(); thumbnail = (Bitmap) data.getExtras().get("data"); image_view.setImageBitmap(thumbnail); } else if (resultCode == Activity.RESULT_CANCELED) { Toast.makeText(getBaseContext(), "Se ha cancelado la captura de foto " ,Toast.LENGTH_SHORT).show(); } } catch(Exception e){} } ............... .......... Y en otra parte del programa actúo con las variables que he cargado en este código file = new File(folder,String.valueOf(NombreFoto) + ".jpg"); OutputStream f = null; try { f = new FileOutputStream(file); thumbnail.compress(Bitmap.CompressFormat.PNG, 100, f); f.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } Se que estoy comprimiendo la foto pero al darle al valor 100 no se guarda con buena calidad? no he visto que la gente que use este método se queje de una perdida de calidad tan brutal como la que yo tengo. Muchas gracias compis. |
|
|
|
#2
|
||||
|
||||
|
La parte importante aquí y que no has puesto es lo que hace getScaledBitmap(selectedImage), ahí es donde puede ser que estés perdiendo calidad.
¿Puedes poner el código? Y por cierto, la imagen que obtienes de la cámara es siempre de baja calidad (al menos si el desarrollo de la app de cámara se ajusta a lo que especifica Google, hay algunas como Camara360 que si la devuelven con buena calidad). Para obtenerla con buena calidad tienes que pasarle un fichero donde quieras que se almacene la foto, y luego en el onActivityResult abrir directamente ese fichero. Última edición por kriogeN Día 18/02/14 a las 14:09:42. |
|
#3
|
||||
|
||||
|
La parte importante aquí y que no has puesto es lo que hace getScaledBitmap(selectedImage), ahí es donde puede ser que estés perdiendo calidad.
¿Puedes poner el código? Y por cierto, la imagen que obtienes de la cámara es siempre de baja calidad (al menos si el desarrollo de la app de cámara se ajusta a lo que especifica Google, hay algunas como Camara360 que si la devuelven con buena calidad). Para obtenerla con buena calidad tienes que pasarle un fichero donde quieras que se almacene la foto, y luego en el onActivityResult abrir directamente ese fichero. ![]() Con respecto a la cámara podría actuar de la siguiente manera? hacer la foto, copiar físicamente el achivo foto que genera la cámara , copiarlo en mi carpeta y ahí de alguna manera tratarlo para que ocupe menos?. Es que no se como se suele trabajar con las imágenes ... Muchas gracias por tu tiempo |
|
#4
|
||||
|
||||
|
La parte importante aquí y que no has puesto es lo que hace getScaledBitmap(selectedImage), ahí es donde puede ser que estés perdiendo calidad.
¿Puedes poner el código? Y por cierto, la imagen que obtienes de la cámara es siempre de baja calidad (al menos si el desarrollo de la app de cámara se ajusta a lo que especifica Google, hay algunas como Camara360 que si la devuelven con buena calidad). Para obtenerla con buena calidad tienes que pasarle un fichero donde quieras que se almacene la foto, y luego en el onActivityResult abrir directamente ese fichero. ![]() private Bitmap getScaledBitmap(Uri uri){ Bitmap thumb = null ; try { ContentResolver cr = getContentResolver(); InputStream in = cr.openInputStream(uri); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize=8; thumb = BitmapFactory.decodeStream(in,null,options); } catch (FileNotFoundException e) { Toast.makeText(getBaseContext(), "Archivo no encontrado " ,Toast.LENGTH_SHORT).show(); } return thumb ; } Un saludo |
|
#5
|
||||
|
||||
|
El problema lo tienes en el inSampleSize = 8, le estás diciendo que te de una imagen 8 veces inferior. Es decir, si tu imagen es de 1024x768 la imagen final será de 128x96. Que viene siendo un tamaño de mierda.
Prueba quitando la línea. |
| Gracias de parte de: | ||
|
#6
|
||||
|
||||
|
Muchísimas gracias kriogeN, con eso tengo resuelto el problema de las fotos de la galería. Voy a investigar a ver si puedo solucionar el de la cámara
Gracias de nuevo
Última edición por canogt Día 19/02/14 a las 09:19:10. |
|
#7
|
||||
|
||||
|
Y por cierto, la imagen que obtienes de la cámara es siempre de baja calidad (al menos si el desarrollo de la app de cámara se ajusta a lo que especifica Google, hay algunas como Camara360 que si la devuelven con buena calidad). Para obtenerla con buena calidad tienes que pasarle un fichero donde quieras que se almacene la foto, y luego en el onActivityResult abrir directamente ese fichero.
![]() Al final lo de la cámara lo hice como me comentaste, pasandole el fichero donde tenia que escribir la imagen con el EXTRA_OUTPUT y luego la paso por mi método getScaledBitmap para hacerla menos pesada. Ahora tengo otro problema a ver si alguien le ha pasado, después de recuperar la imagen de la cámara y guardarla en la carpeta de mi aplicación, al mostrarla en un imageview en algunos móviles lo hace bien pero en otros no, por ejemplo en mi galaxy s3 me la deja rotada 90 º ... Alguna idea? Gracias. |
|
#8
|
||||
|
||||
|
Eso es porque algunas aplicaciones de cámara no almacenan bien la rotación de la imagen, y entonces al abrirlas salen rotadas. Yo llevo trabajando 1 año en una aplicación de compartir fotografías y ya estos problemas me he enfrentado a todos.
Ahora cuando llegue a la oficina te posteo el código que uso yo para rotar correctamente la imagen. |
| Gracias de parte de: | ||
|
#9
|
||||
|
||||
|
Eso es porque algunas aplicaciones de cámara no almacenan bien la rotación de la imagen, y entonces al abrirlas salen rotadas. Yo llevo trabajando 1 año en una aplicación de compartir fotografías y ya estos problemas me he enfrentado a todos.
Ahora cuando llegue a la oficina te posteo el código que uso yo para rotar correctamente la imagen. ![]() |
|
#10
|
||||
|
||||
|
Eso es porque algunas aplicaciones de cámara no almacenan bien la rotación de la imagen, y entonces al abrirlas salen rotadas. Yo llevo trabajando 1 año en una aplicación de compartir fotografías y ya estos problemas me he enfrentado a todos.
Ahora cuando llegue a la oficina te posteo el código que uso yo para rotar correctamente la imagen. ![]() Podrías echarme una mano con esto? algún link o alguna idea para ir buscando, implemente un método que busca las orientaciones de las imágenes pero a veces me funciona y otras no. La verdad es que estoy atascado con esto ![]() Un saludo y gracias |
![]() |
Estás aquí
|
||||||
|
||||||
| Herramientas | |