![]() |
|
| 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 |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||||
|
||||
|
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);
}
para ver si funcionaba y reescalaba algo y nada...no hacia nada Muchas gracias! |
|
|
|
#2
|
||||
|
||||
|
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 |
|
#3
|
||||
|
||||
|
Cita:
Muchas gracias otra vez! |
|
#4
|
||||
|
||||
|
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 |
|
#5
|
||||
|
||||
|
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); 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;
}
|
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 18:03:12 (GMT +1)
HTCMania: líderes desde el 2007






