2012-05-02 22 views
10

El siguiente código define mi mapa de bits:¿Dibuja un mapa de bits a escala en el lienzo?

Resources res = context.getResources(); 

    mBackground = BitmapFactory.decodeResource(res, 
      R.drawable.bg2); 

    //scale bitmap 
    int h = 800; // height in pixels 
    int w = 480; // width in pixels  
    Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true); // Make sure w and h are in the correct order 

... Y el siguiente código se utiliza para ejecutar/dibujar (el mapa de bits sin escala):

c.drawBitmap(mBackground, 0, 0, null); 

Mi pregunta es, ¿Cómo puede ocurrir configurarlo para dibujar el mapa de bits escalado devuelto en forma de "Escala de mapa de bits" y no el original?

Respuesta

25

Definir una nueva variable miembro de la clase: Bitmap mScaledBackground; A continuación, asigne el mapa de bits de escala de nueva creación a la misma: mScaledBackground = scaled; A continuación, llamar en su método draw: c.drawBitmap(mScaledBackground, 0, 0, null);

en cuenta que no es una buena idea para codificar el tamaño de la pantalla de la manera en que lo hizo en su fragmento de arriba. Mejor sería a buscar el tamaño de su pantalla del dispositivo de la siguiente manera:

int width = getWindowManager().getDefaultDisplay().getWidth(); 
int height = getWindowManager().getDefaultDisplay().getHeight(); 

Y sería probablemente mejor no declarar un nuevo mapa de bits para el único propósito de dibujar su fondo original de una manera ajustada a escala. Los mapas de bits consumen una gran cantidad de recursos valiosos y, por lo general, un teléfono está limitado a unos pocos MB de mapas de bits que puede cargar antes de que la aplicación falle. En su lugar se podría hacer algo como esto:

Rect src = new Rect(0,0,bitmap.getWidth()-1, bitmap.getHeight()-1); 
Rect dest = new Rect(0,0,width-1, height-1); 
c.drawBitmap(mBackground, src, dest, null); 
+1

tu respuesta funcionó para mí, pero restar 1 del ancho y alto en argumentos fue mostrar una línea (desde otro mapa de bits en el fondo) a la derecha e inferior del mapa de bits, eliminando -1 funcionó bien. – akshay7692

+1

Sé que esta es una publicación más antigua ahora. Pero para Android 7.0+, es posible que no pueda confiar en el ancho/alto de la pantalla completa cuando esté en modo de pantalla dividida. Entonces, para cualquiera que use esta solución, debe tener esto en cuenta. – MCLLC

+0

¿De esta manera dibujaría un mapa de bits muy lento? – Amos

2

Para dibujar el mapa de bits reducido que desea guardar su mapa de bits reducido en un campo en algún lugar (aquí se llama mScaled) y llamar:

c.drawBitmap(mScaled,0,0,null); 

en su método draw (o donde sea que lo llames ahora mismo).

Cuestiones relacionadas