如何将两个位图合并在一起,一个位于另一个之上

34

我有两张图片,想要将其中一张位图图像精确地保存在另一张图像的同一点上,同时我还可以使用手势移动图像。

public Bitmap combineImages(Bitmap ScaledBitmap, Bitmap bit) {

        int X = bit.getWidth();
        int Y = bit.getHeight();

        Scaled_X = ScaledBitmap.getWidth();
        scaled_Y = ScaledBitmap.getHeight();

        System.out.println("Combined Images");

        System.out.println("Bit :" + X + "/t" + Y);

        System.out.println("SCaled_Bitmap :" + Scaled_X + "\t" + scaled_Y);

        overlaybitmap = Bitmap.createBitmap(ScaledBitmap.getWidth(),
                ScaledBitmap.getHeight(), ScaledBitmap.getConfig());
        Canvas canvas = new Canvas(overlaybitmap);
        canvas.drawBitmap(ScaledBitmap, new Matrix(), null);
        canvas.drawBitmap(bit, new Matrix(), null);

        return overlaybitmap;
    }

任何帮助都将不胜感激。

请查看我的帖子http://stackoverflow.com/questions/6925756/how-to-draw-image-frame-for-camera-view-and-overlapping-the-image-frame-on-captu - dinesh sharma
是的,我看到我的位图bmp2覆盖在bmp1上,但我的问题是,我想要保存在我双击bmp2并进行pinch缩放后的确切位置......使用手势时出现的问题是,bmp2根据bmp1的大小保存...... - Hector4888
@IntelliJAmiya请停止使用“任何帮助都将不胜感激”进行编辑。请阅读http://stackoverflow.com/help/editing。 - rnrneverdies
尝试这个:https://dev59.com/EW445IYBdhLWcg3wcJ2O - parmar prit
2个回答

76

你可以像这样组合两个位图

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
    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);
    bmp1.recycle();
    bmp2.recycle();
    return bmOverlay;
}

如果我想要一些填充,以便两个图像都可见,那么怎么办? - Akram
2
bmp1(500, 500)和bmp2(400, 400)是我尝试的内容,但bmp1显示了它们的实际大小,而当我使用手势放大bmp2到(40, 50)时,它保存的是根据bmp1的位置,我想要根据手势放置的图像位置来保存。 - Hector4888
好的,最后我解决了我的问题:canvas.drawBitmap(bit, canvas 的参数, canvas 的参数, null); - Hector4888
我正在尝试这个,但是出现了这个错误:"at android.graphics.Canvas.throwIfRecycled(Canvas.java:1025)" - Amalan Dhananjayan

10

你可以将两个位图组合在一起,即将一个位图叠加在另一个位图上作为覆盖层。
尝试使用以下代码:

 public Bitmap bitmapOverlayToCenter(Bitmap bitmap1, Bitmap overlayBitmap) {
        int bitmap1Width = bitmap1.getWidth();
        int bitmap1Height = bitmap1.getHeight();
        int bitmap2Width = overlayBitmap.getWidth();
        int bitmap2Height = overlayBitmap.getHeight();

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

        Bitmap finalBitmap = Bitmap.createBitmap(bitmap1Width, bitmap1Height, bitmap1.getConfig());
        Canvas canvas = new Canvas(finalBitmap);
        canvas.drawBitmap(bitmap1, new Matrix(), null);
        canvas.drawBitmap(overlayBitmap, marginLeft, marginTop, null);
        return finalBitmap;
    }  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接