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

Respuesta
 
Herramientas
  #1  
Viejo 11/03/13, 10:38:51
Array

[xs_avatar]
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Escalado Bitmap

Buenas otra vez!

A ver si me podeis echar un cable con esto:

Tengo un bitmap dentro de un canvas, y me gustaría poder hacerlo mas grande y mas pequeño (haciendo el tipico gesto con los 2 dedos)

pero me encuentro con un problema, tengo mi funcion de redimensionarBmp y no hace nada, no me lo redimensiona: la funcion es la siguiente:
Código:
public Bitmap redimensionarBmp(Bitmap mBitmap, double newWidth, double newHeigth){
		   
		   int width = mBitmap.getWidth();
		   int height = mBitmap.getHeight();
		   float scaleWidth = ((float) newWidth) / width;
		   float scaleHeight = ((float) newHeigth) / height;
		   Matrix matrix = new Matrix();
		   matrix.postScale(scaleWidth,scaleHeight);
		   return Bitmap.createBitmap(mBitmap, 0, 0, width, height, matrix, false);
	}
esta funcion si la uso en otras partes de la aplicacion funciona correctamente y lo escala al alto y ancho nuevo que le paso, cuando lo hago a la hora de pintarlo en el canvas no hace nada, he probado a llamarla de la siguiente manera: redimensionar(miBmp, 100,100);
para ver si funcionaba y reescalaba algo y nada...no hacia nada

Muchas gracias!
Responder Con Cita


  #2  
Viejo 11/03/13, 12:41:49
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Lo más rápido es usar inSampleSize con BitmapFactory, así lo hago yo siempre.

La putada es que la reducción siempre tiene que ser potencia de 2, es decir, no puedes hacer que la imagen sea 1/3 de la original, tiene que ser un 1/2 o 1/4.

Prueba con createScaledBitmap, aunque es algo más lento que usar inSampleSize.

Ni que decir tiene además que mucho cuidado trabajando con Bitmap, ya que su gestión de memoria es pésima, y a la que menos te lo esperes recibirás un VM Budget Out of Memory. Recomiendan que recicles las imágenes siempre que vayas a dejar de usarla, en tu caso la imagen original, porque ya vas a trabajar con la reducida. Pero aún así pueden seguir dando problemas.

Yo siempre meto los Bitmap en SoftReferences, desde que lo hago nunca más he vuelto a tener un problema de memoria con los Bitmap.

Última edición por kriogeN Día 11/03/13 a las 12:44:06.
Responder Con Cita
  #3  
Viejo 12/03/13, 09:19:58
Array

[xs_avatar]
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Ni que decir tiene además que mucho cuidado trabajando con Bitmap, ya que su gestión de memoria es pésima, y a la que menos te lo esperes recibirás un VM Budget Out of Memory. Recomiendan que recicles las imágenes siempre que vayas a dejar de usarla, en tu caso la imagen original, porque ya vas a trabajar con la reducida. Pero aún así pueden seguir dando problemas.

Yo siempre meto los Bitmap en SoftReferences, desde que lo hago nunca más he vuelto a tener un problema de memoria con los Bitmap.
No entendi estos dos ultimos parrafos, si que es cierto que cuando agrando la imagen, me va un poco mas lenta la aplicacion, por no decir bastante mas lento, hay alguna manera de soluccionar eso? con eso que comentastes de pasarlo a SoftReferences?? me podias indicar como se hace eso?

Muchas gracias otra vez!
Responder Con Cita
  #4  
Viejo 12/03/13, 11:54:50
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
EDITO: No había leído bien el post. Ahora ya si me he enterado de lo que quieres.

En cuanto a los párrafos que no entiendes, si no tienes problemas de memoria por ahora no te preocupes. En cuanto a lo de que te va lento cuando amplías la imagen, es no es problema de la memoria. Lo que ocurre es que redimensionas en píxeles el Bitmap y lógicamente al pintarlo le cuenta más.

Lo que tienes que hacer es hacer que al pintar se extienda, pero sin variar el tamaño físico del Bitmap. Luego te pongo un código de ejemplo.

EDITO 2: Usa esto:

drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)

Usando como Matrix la que calculas en el fragmento de código que has puesto.

Última edición por kriogeN Día 12/03/13 a las 12:07:52.
Responder Con Cita
  #5  
Viejo 13/03/13, 12:10:20
Array

[xs_avatar]
pablogarcia013 pablogarcia013 no está en línea
Miembro del foro
 
Fecha de registro: ene 2013
Localización: Madrid
Mensajes: 148
Modelo de smartphone: Samgung Galaxy s2
Tu operador: Orange
Gracias por el codigo, no me habia dado cuenta de que era ese
lo he probado y me lo hace bien lo de mover, pero no se me escala, el codigo que tengo ahora es:

Código:
Matrix m = this.redimensionarBmp(i.getBitmap(),i.getAncho()-i.getX(),i.getAlto()-i.getY(),i.getRotacion(),i.getX(),i.getY());
		    		if(m!=null)canvas.drawBitmap(i.getBitmap(), m,null);
y mi redimensionarBmp es asi:
Código:
public Matrix redimensionarBmp(Bitmap mBitmap, double newWidth, double newHeigth,float rotacion,float dx, float dy){
		   if(newHeigth>0){
			   int width = mBitmap.getWidth();
			   int height = mBitmap.getHeight();
			   float scaleWidth = ((float) newWidth) / width;
			   float scaleHeight = ((float) newHeigth) / height;
			   Matrix matrix = new Matrix();
			   matrix.postScale(scaleWidth,scaleHeight);
			   matrix.postRotate(rotacion);
			   matrix.setTranslate(dx, dy);
			   return matrix; 
		   }else return null;
	}
Responder Con Cita
Respuesta

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



Hora actual: 19:51:13 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /