2012-10-09 16 views
7

Hola, estoy trabajando en una buena aplicación de Android donde necesito ajustar el mapa de bits grande en tamaño pequeño imageview. Estoy usando imageview de tamaño 300dp X 300dp para mostrar la imagen grande 1024 X 780Ajusta la imagen grande en una pequeña imagen con la misma calidad que la imagen original?

¿Cómo puedo hacer que la imagen grande en pequeño, con tan buena calidad como la imagen original?

+3

Debe hacer una imagen en miniatura del tamaño 300x300 pero conservando su relación de aspecto. Puede dibujar imágenes más grandes en un lienzo centrado con un poco de color llenando el resto del espacio. –

Respuesta

0

@Nikola comentario respondió a mi pregunta. Estoy escribiendo esto en la respuesta para que sea bueno para los lectores futuros

Debe hacer una imagen en miniatura de tamaño 300x300 pero conservando su relación de aspecto. Puede dibujar imágenes más grandes en un lienzo centrado con un poco de color llenando el resto del espacio.

0

¿Usted intentó im.setScaleType(ScaleType.FIT_XY)

+1

** No use esto para eso. ** 'FIT_XY' no * mantiene * la relación de aspecto y estirará su imagen. 'FIT_CENTER' sería más apropiado. – kcoppock

9

Prueba esto:

public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 
    // CREATE A MATRIX FOR THE MANIPULATION 
    Matrix matrix = new Matrix(); 
    // RESIZE THE BIT MAP 
    matrix.postScale(scaleWidth, scaleHeight); 
    // RECREATE THE NEW BITMAP 
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, 
      matrix, false); 
    return resizedBitmap; 

} 

Fácil de usar:

Bitmap bmResized=getResizedBitmap(yourBitmap,newHeight,newWidth); 

y le entregan su imagen redimensionada

Nota: Si desea cambiar el tamaño de la imagen Utilice esta Recursos para convertir a mapa de bits:

Bitmap bmOrginal=BitmapFactory.decodeResource(this.getResources(), R.drawble.yourRes); 
Bitmap bmResized=getResizedBitmap(bmOrginal,newHeight,newWidth); 

asentando después la imagen redimensionada:

image.setImageBitmap(bmResized); 
+0

Debido a la forma en que funciona el filtrado en Android, para obtener un cambio de tamaño de alta calidad, me parece necesario realizar un cambio de tamaño de dos pasos si los tamaños de origen y destino difieren más de 2 veces. En el caso de 1024x780 a 300x228 lo haría en dos pasos: 1024x780 [más de 2x del destino, por lo que] → 600x456 [2x del destino] → 300x228. Pero, eso es lento y puede ser innecesario (es una compensación de rendimiento/calidad). – user1410657

+0

+1 Gracias hombre! ¡Salvaste mi día! Funcionó a las mil maravillas. Gracias de nuevo. – Sajmon

+0

buena solución gracias – kathir

Cuestiones relacionadas