在那里,我想将 Bitmap
叠加到我的另一个 Bitmap
上 . 你可以说,我想在另一个 bitmap
上画一个 Bitmap
.
假设我有一个 Bitmap
:
我想在这个位图上绘制另一个 bitmap
"KEEP CALM AND CHECK YOUR WORK"!这将是 Bitmap 1
Bitmap
我想放在 bitmap
上就像效果叠加一样:
这将是 Bitmap 2
问题
我想将 Bitmap 2 叠加到 Bitmap 1 上,说 Bitmap 2 应该高于 Bitmap 1 .
Bitmap 2 应该获得 Bitmap 1 的宽度和高度来覆盖它 .
Bitmap 1 将具有任何宽度和高度,但是,我希望 Bitmap 2 在任何情况下都应该获得 Bitmap 1 的宽度和高度 .
我的代码问题是 crops Bitmap 1 并覆盖 Bitmap 2 然后 . 我的意思是代码获得 Bitmap 2 宽度和高度!
我做了什么
public Bitmap overlay123(Bitmap bmp1, Bitmap bmp2) {
Bitmap bmOverlay = Bitmap.createBitmap(bmp2.getWidth(), bmp2.getHeight(), bmp1.getConfig());
float left =(bmp2.getWidth() - (bmp1.getWidth()*((float)bmp2.getHeight()/(float)bmp1.getHeight())))/(float)2.0;
float bmp1newW = bmp1.getWidth()*((float)bmp2.getHeight()/(float)bmp1.getHeight());
Bitmap bmp1new = getResizedBitmap(bmp1, bmp2.getHeight(), (int)bmp1newW);
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1new, left ,0 , null);
canvas.drawBitmap(bmp2, new Matrix(), null);
return bmOverlay;
}
public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
return resizedBitmap;
}
上面代码的问题是它会裁剪或调整 bitmap 1 宽度和高度!
试试2
private Bitmap overlayer(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, new Matrix(), null);
return bmOverlay;
}
代码问题是它总是在左上角显示 Bitmap 2 ,尺寸更小!
我只需要知道如何将 Bitmap 2 放置 Bitmap 1 获得与 Bitmap 1 相同的宽度和高度 .
我是位图代码的新手,所以我不知道它
谢谢你的推荐!
最终图像应如下所示:
2 回答
MainActivity Output.
activity_main.xml
Output:
Output result see here.
首先,我建议您使用 Try2 作为进一步工作的基础 . 但我会略微修改代码:
我使用了android developer reference上提到的构造函数来绘制位图 . 您定义了一个新的Recatangle,该服务器作为用于缩放/绘制位图到画布的形状 . 在您的情况下,我定义的矩形与您的bitmap1大小相同 . 如果将此重新控制框移交到绘制画布的方法,则画布会将位图缩放到该框大小并在画布上绘制它 .