'How to overlay two bitmaps (CENTER-BOTTOM) with a fixed size

I'm trying to draw a bitmap on the top of another bitmap like this :

I'm using the following code to create an empty background with 420x420 as size, and draw the star on it :

  for (int i = 0; i < 10; i++) {
        Bitmap resized;
        if (stretchedPosition.contains(i)) {
        resizedStar = Bitmap.createScaledBitmap(star, star.getWidth() - 80, star.getHeight() + 80, true);
        } else
        resizedStar = Bitmap.createScaledBitmap(star, star.getWidth() + 80, star.getHeight() - 80, true);
        resized = makeBackground(resized);

        //code for generating a GIF from bitmaps
  }


public Bitmap makeBackground(Bitmap resized) {
        Bitmap emptyBitmap = Bitmap.createBitmap(420, 420, Bitmap.Config.ARGB_8888);
        int positionLeft = 0;
        int positionTop = 0;
        Bitmap newBitmap = Bitmap.createBitmap(emptyBitmap.getWidth(), emptyBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(newBitmap);
        canvas.drawBitmap(emptyBitmap, positionLeft, positionTop, null);
        canvas.drawColor(Color.GREEN);
        
        int bitmap1Width = resized.getWidth();
        int bitmap1Height = resized.getHeight();
        int bitmap2Width = emptyBitmap.getWidth();
        int bitmap2Height = emptyBitmap.getHeight();

        float marginLeft = (float) (bitmap1Width * 0.5 - bitmap2Width * 0.5);
        float marginTop = (float) (bitmap1Height * 0.5 - bitmap2Height * 0.5);

        canvas.drawBitmap(resized, new Matrix(), null);
        canvas.drawBitmap(emptyBitmap, marginLeft, marginTop, null);
        return newBitmap;
    }

THE ISSUE:

As you can see here, the girl image is not centered and the image gets cut as well.



Solution 1:[1]

This may helps you;

Bitmap fileBitmap = BitmapFactory.decodeFile(filePath);
Bitmap blankBitmap = getBlankBitmap(YOUR_WIDTH, YOUR_HEIGHT);
Bitmap mergeBitmap = overlay(blankBitmap, fileBitmap);
    

you can generate blank bitmap using following method:

public static Bitmap getBlankBitmap(int w, int h) {
        Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
        Bitmap bmp = Bitmap.createBitmap(w, h, conf); // this creates a MUTABLE bitmap
        Canvas canvas = new Canvas(bmp);
        return bmp;
 }

and Merge two bitmap like this;

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
    int padding = (bmp1.getWidth() / 2) - (bmp2.getWidth() / 2);

    Canvas canvas = new Canvas(bmOverlay);
    canvas.drawBitmap(bmp1, new Matrix(), null);
    canvas.drawBitmap(bmp2, padding, 0, null);
    bmp1.recycle();
    bmp2.recycle();
    return bmOverlay;
}
    

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Bhoomika Patel