Merge two bitmaps in android

30,572

Solution 1

From your example, you forgot to add the next lines:

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

In your example above you don't draw your image in the canvas, and that is the problem. You can think that your canvas i your sketchbook. For now you didn't paint anything, and you ask yourself, way I can't see any colors.

So, for my advice, first create the two bitmaps, then, do the next thing:

c.drawBitmap(cameraBitmap, top point, left point, null);
c.drawBitmap(foreground, top point, left point, null); 

You can also do this by first create the drawable objects from your bitmaps, like in the next code:

Drawable cameraBitmap = BitmapDrawable(cameraBitmap);
Drawable foreground= BitmapDrawable(foreground);

Then when you have the drawable objects, you can set thier bounds, and that way you set where do you want to show that image.

cameraBitmap.setBounds(left, top, right, bottom);
foreground.setBounds(left, top, right, bottom);

and finally draw that on the canvas:

cameraBitmap.draw(canvas);
foreground.draw(canvas);

EDIT:

This is an example, use this to understand your implementation:

    Bitmap bitmap = null;
    try {

        bitmap = Bitmap.createBitmap(500, 500, Config.ARGB_8888);
        Canvas c = new Canvas(bitmap);
        Resources res = getResources();


        Bitmap bitmap1 = BitmapFactory.decodeResource(res, R.drawable.test1); //blue

        Bitmap bitmap2 = BitmapFactory.decodeResource(res, R.drawable.test2); //green
        Drawable drawable1 = new BitmapDrawable(bitmap1);
        Drawable drawable2 = new BitmapDrawable(bitmap2);


        drawable1.setBounds(100, 100, 400, 400);
        drawable2.setBounds(150, 150, 350, 350);
        drawable1.draw(c);
        drawable2.draw(c);


    } catch (Exception e) {
    }
    return bitmap;

This is what I get from the code above:

enter image description here

Solution 2

Merging Two Bitmap vertically when one is large and second is small
follow this method

 public Bitmap finalcombieimage(Bitmap c, Bitmap s) {
    Bitmap cs = null;
    DisplayMetrics metrics = getBaseContext().getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas comboImage = new Canvas(cs);
    Rect dest1 = new Rect(0, 0, width, height); // left,top,right,bottom
    comboImage.drawBitmap(c, null, dest1, null);
    Rect dest2 = new Rect(0, height-400 / 2, width, height);
    comboImage.drawBitmap(s, null, dest2, null);
    return cs;
}

enter image description here

Share:
30,572
Numair
Author by

Numair

SOreadytohelp

Updated on July 05, 2022

Comments

  • Numair
    Numair almost 2 years

    I want to merge two bitmaps, here is my code

    // Camera arg conversion to Bitmap
                        Bitmap cameraBitmap = BitmapFactory.decodeByteArray(arg0, 0,
                                arg0.length);
                        Bitmap back = Bitmap.createBitmap(cameraBitmap.getWidth(),
                            cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888);
                        Canvas cam = new Canvas(back);
                        cam.drawBitmap(cameraBitmap, matrix, null);
    
    
                        // FrameLayout to Bitmap
                        FrameLayout mainLayout = (FrameLayout) findViewById(R.id.frame);
                        Bitmap foreground = Bitmap.createBitmap(mainLayout.getWidth(),
                                mainLayout.getHeight(), Bitmap.Config.ARGB_8888);
                        Canvas c = new Canvas(foreground);
                        mainLayout.draw(c);
    
                        Bitmap cs = null;
                        cs = Bitmap.createBitmap(foreground.getWidth(), cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888); 
    
                        Canvas comboImage = new Canvas(cs); 
                        comboImage.drawBitmap(cameraBitmap, 0f, 0f, null); 
                        comboImage.drawBitmap(foreground, 0f, cameraBitmap.getHeight(), null); 
    
                        FileOutputStream fos = null;
                        try {
                            fos = new FileOutputStream(file);
                            if (fos != null) {
                                cs.compress(Bitmap.CompressFormat.PNG, 90, fos);
                                fos.close();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }   
    

    The camera image should become background, and foreground as top image. I've tried from Combining 2 Images in Android using Canvas but it didn't help me. Any idea.? Thanks