Combining two bitmap image (side by side)

You can use Canvas - check out this article:

http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas

Updated code to do it side by side:

public Bitmap combineImages(Bitmap c, Bitmap s) { // can add a 3rd parameter 'String loc' if you want to save the new image - left some code to do that at the bottom 
    Bitmap cs = null; 

    int width, height = 0; 

    if(c.getWidth() > s.getWidth()) { 
      width = c.getWidth() + s.getWidth(); 
      height = c.getHeight(); 
    } else { 
      width = s.getWidth() + s.getWidth(); 
      height = c.getHeight(); 
    } 

    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

    Canvas comboImage = new Canvas(cs); 

    comboImage.drawBitmap(c, 0f, 0f, null); 
    comboImage.drawBitmap(s, c.getWidth(), 0f, null); 

    // this is an extra bit I added, just incase you want to save the new image somewhere and then return the location 
    /*String tmpImg = String.valueOf(System.currentTimeMillis()) + ".png"; 

    OutputStream os = null; 
    try { 
      os = new FileOutputStream(loc + tmpImg); 
      cs.compress(CompressFormat.PNG, 100, os); 
    } catch(IOException e) { 
      Log.e("combineImages", "problem combining images", e); 
    }*/ 

    return cs; 
  } 

I ended up modifying xil3's answer into a kotlin extension function, maybe it will be useful to someone. In my case I wanted the images stacked vertically

fun Bitmap?.combine(b: Bitmap?): Bitmap? =
when {
    b == null || this == null -> {
        this ?: b
    } else -> {
        val cs = Bitmap.createBitmap(
            max(this.width, b.width),
            this.height + b.height,
            Bitmap.Config.ARGB_8888
        )
        val canvas = Canvas(cs)
        canvas.drawBitmap(this, 0f, 0f, null)
        canvas.drawBitmap(b, 0f, this.height.toFloat(), null)
        cs
    }
}

Tags:

Android