2011-12-07 20 views
6

Quiero crear una imagen combinada con dos imágenes diferentes superponiendo.¿Cómo usar Canvas para fusionar dos imágenes en Android?

Por esta Mi código es

ImageView image = (ImageView) findViewById(R.id.imageView1); 
    Drawable drawableFore = getResources().getDrawable(R.drawable.foreg); 
    Drawable drawableBack = getResources().getDrawable(R.drawable.backg); 

    Bitmap bitmapFore = ((BitmapDrawable) drawableFore).getBitmap(); 
    Bitmap bitmapBack = ((BitmapDrawable) drawableBack).getBitmap(); 

    Bitmap scaledBitmapFore = Bitmap.createScaledBitmap(bitmapFore, 35, 35, true); 
    Bitmap scaledBitmapBack = Bitmap.createScaledBitmap(bitmapBack, 45, 45, true); 

    Bitmap combineImages = overlay(scaledBitmapBack, scaledBitmapFore); 

    image.setImageBitmap(combineImages); 

superposición() método es

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) 
{ 
try 
{ 
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig()); 
    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bmp1, new Matrix(), null); 
    canvas.drawBitmap(bmp2, 0, 0, null); 
    return bmOverlay; 
} catch (Exception e) 
{ 
    // TODO: handle exception 
    e.printStackTrace(); 
    return null; 
} 
} 

caso 1: Método de superposición devuelve un valor nulo en este caso.

caso 2: Pero cuando cambio imágenes como uso la imagen de fondo para configurar en primer plano y en primer plano la imagen para establecer en segundo plano, el código funciona bien.

pero quiero que el primer caso funcione correctamente pero no lo es. No entiendo por qué sucede esto.

Por favor ayuda

+0

No sé por qué n cómo, ahora está funcionando. – AB1209

Respuesta

10

creo que suceda, porque el segundo mapa de bits es más grande en tamaño. Así que intente esto:

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) 
{ 
try 
{ 
    int maxWidth = (bmp1.getWidth() > bmp2.getWidth() ? bmp1.getWidth() : bmp2.getWidth()); 
    int maxHeight = (bmp1.getHeight() > bmp2.getHeight() ? bmp1.getHeight() : bmp2.getHeight()); 
    Bitmap bmOverlay = Bitmap.createBitmap(maxWidth, maxHeight, bmp1.getConfig()); 
    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bmp1, 0, 0, null); 
    canvas.drawBitmap(bmp2, 0, 0, null); 
    return bmOverlay; 

} catch (Exception e) 
{ 
    // TODO: handle exception 
    e.printStackTrace(); 
    return null; 
} 
} 
+0

Gracias, está trabajando ahora. – AB1209

+1

@Caner: ¡trabajando como un encanto! Gracias. – dakshbhatt21