Home Menu

Menu



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  
Viejo 29/04/13, 12:42:22
Avatar de pablogarcia013
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
Mensajes: 148
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Perdida calidad Bitmap

Buenas!

Tengo una serie de bitmap que voy reescalando con matrix.postScale, y la cuestión es que pierde bastante calidad, tanto si lo hago pequeño como si lo hago grande, hay alguna manera de que el bitmap siga teniendo la calidad que tenia antes de reescalarlo?

Muchas gracias!
Responder Con Cita


  #2  
Viejo 29/04/13, 12:57:53
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Siempre te va a perder calidad al redimensionar una imagen, sobre todo si luego quieres verla con el mismo tamaño que la imagen original.

Al hacerla más grande haces lo que se llama interpolado positivo, que lo que hace es inventarse puntos en la imagen, aproximados a los puntos que tiene alrededor. Esto SIEMPRE va a hacer que la imagen se vea peor.

Al hacerla más pequeña haces interpolado negativo, lo que hace es quitar puntos de la imagen, su efecto no se nota siempre y cuando la imagen la veas al tamaño al que lo redujiste, si luego tratas de ampliarla y verla al tamaño de la imagen original, obviamente perderás calidad al haber quitado puntos de la imagen.

Ejemplo del segundo caso: Tienes un móvil de 800x480 (HDPI Standard), y tienes una imagen de la misma resolución. A pantalla completa en el móvil la verás perfecta. Ahora coges y la reduces a a la mitad, 400x240. Siempre y cuando en el móvil la veas a esa resolución (ocupando sólo la zona central del móvil, y el resto bordes negros) la seguirás viendo bien, pero más pequeña, en cuanto la amplíes la verás mal.

Ahora bien, si aún reduciéndola y manteniéndola viéndose pequeña la ves mal, entonces si puede ser que puedas mejorar la calidad. ¿Haces algo más a parte del createBitmap con la nueva matrix?
Responder Con Cita
  #3  
Viejo 29/04/13, 13:09:40
Avatar de pablogarcia013
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
Mensajes: 148
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
No creo de nuevo el bitmap, simpelemente creo una matriz y haog un drawBitmap con la nueva matriz asignada (Reescalada al valor que quiero)

Edito 1: ¿Los programas que hacen trato de imagenes, es decir que puedes ampliarlas con los dedos y girarlas, no pierden calidad o es que no se nota, o si no pierden calidad, sabes como lo hacen?
Responder Con Cita
  #4  
Viejo 29/04/13, 13:12:47
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Asegurate de tener el antialiasing activado, que por defecto no lo está.

Al paint que le pases al drawBitmap tienes que hacerle antes un paint.setAntiAlias(true);
Responder Con Cita
  #5  
Viejo 29/04/13, 13:14:23
Avatar de pablogarcia013
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
Mensajes: 148
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Tengo puesto el paint a null, lo correcto seria crearse un paint y hacerle un paint.setAntiAlias(true);
osea:

Paint p = new Paint();
p.setAntiAlias(true);
y de ahi ya llamar a canvas.draw(...,p)?
Responder Con Cita
  #6  
Viejo 29/04/13, 13:16:12
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Yo tengo una subclase de ImageView que hace eso, y lo que hace es usar el setImageMatrix del ImageView.
Responder Con Cita
  #7  
Viejo 29/04/13, 13:57:16
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por pablogarcia013 Ver Mensaje
Tengo puesto el paint a null, lo correcto seria crearse un paint y hacerle un paint.setAntiAlias(true);
osea:

Paint p = new Paint();
p.setAntiAlias(true);
y de ahi ya llamar a canvas.draw(...,p)?
Sí, pero no lo crees cada vez que llames al draw, guarda el Paint como variable de clase para reutilizarlo siempre.
Responder Con Cita
  #8  
Viejo 29/04/13, 15:48:53
Avatar de pablogarcia013
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
Mensajes: 148
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Muchas gracias! voy a probarlo y te comento
Responder Con Cita
  #9  
Viejo 30/04/13, 09:27:26
Avatar de pablogarcia013
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
Mensajes: 148
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Buenas! ya probe lo de setAntiAlias(true) creandome un paint y pasandoselo al dibujar, pero se me ven con menos calidad que si le paso a null...alguno sabe una soluccion? o si lo he hecho mal?

Muchas gracias!
Responder Con Cita
  #10  
Viejo 30/04/13, 10:47:49
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Disculpa, es lo que pasa cuando se dicen las cosas de memoria. Lo correcto es p.setFilterBitmap(true)
Responder Con Cita
  #11  
Viejo 30/04/13, 11:04:03
Avatar de pablogarcia013
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
Mensajes: 148
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Funciona a la perfeccion!
muchisimas gracias otra vez! eres un crack!
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 20:50:26 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007