Ver la Versión Completa : [ CONSULTA ] Perdida calidad Bitmap
pablogarcia013
29/04/13, 12:42:22
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!
kriogeN
29/04/13, 12:57:53
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?
pablogarcia013
29/04/13, 13:09:40
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?
mocelet
29/04/13, 13:12:47
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);
pablogarcia013
29/04/13, 13:14:23
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)?
kriogeN
29/04/13, 13:16:12
Yo tengo una subclase de ImageView que hace eso, y lo que hace es usar el setImageMatrix del ImageView.
mocelet
29/04/13, 13:57:16
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.
pablogarcia013
29/04/13, 15:48:53
Muchas gracias! voy a probarlo y te comento
pablogarcia013
30/04/13, 09:27:26
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!
mocelet
30/04/13, 10:47:49
Disculpa, es lo que pasa cuando se dicen las cosas de memoria. Lo correcto es p.setFilterBitmap(true)
pablogarcia013
30/04/13, 11:04:03
Funciona a la perfeccion!
muchisimas gracias otra vez! eres un crack!
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.