Dec*_*ghy 105
我不敢相信没有人回答这个问题!在SO上很少发生!
问题对我来说没有意义.但生病了.如果你问的是直接绘制到画布(多边形,阴影,文本等......)VS加载一个位图并将其blitting到画布上,这取决于绘图的复杂程度.随着绘图变得越来越复杂,所需的CPU时间也会相应增加.但是,将位图blitting到画布上将始终是一个与位图大小成比例的常量时间.
不知道"什么"是什么,我怎么能告诉你如何做到这一点?你应该能够从#3的答案中找出#2.
假设:
你希望它们都从左上角覆盖.
private 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, new Matrix(), null);
return bmOverlay;
}
Run Code Online (Sandbox Code Playgroud)Lio*_*ior 29
你可以这样做:
public void putOverlay(Bitmap bitmap, Bitmap overlay) {
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(overlay, 0, 0, paint);
}
Run Code Online (Sandbox Code Playgroud)
这个想法非常简单:将位图与画布关联后,可以调用任何画布的方法来绘制位图.
这适用于具有透明度的位图.如果位图具有Alpha通道,则位图将具有透明度.看看Bitmap.Config.您可能想要使用ARGB_8888.
重要提示:请查看此 Android示例,了解可以执行绘图的不同方法.它会帮助你很多.
性能方面(内存方面,确切地说),Bitmaps是最好的对象,因为它们只是包装一个本机位图.ImageView是View的子类,BitmapDrawable包含一个Bitmap,但它也包含许多其他内容.但这是一种过度简化.您可以为精确答案建议特定于性能的方案.
Ans*_*hen 14
public static Bitmap overlayBitmapToCenter(Bitmap bitmap1, Bitmap bitmap2) {
int bitmap1Width = bitmap1.getWidth();
int bitmap1Height = bitmap1.getHeight();
int bitmap2Width = bitmap2.getWidth();
int bitmap2Height = bitmap2.getHeight();
float marginLeft = (float) (bitmap1Width * 0.5 - bitmap2Width * 0.5);
float marginTop = (float) (bitmap1Height * 0.5 - bitmap2Height * 0.5);
Bitmap overlayBitmap = Bitmap.createBitmap(bitmap1Width, bitmap1Height, bitmap1.getConfig());
Canvas canvas = new Canvas(overlayBitmap);
canvas.drawBitmap(bitmap1, new Matrix(), null);
canvas.drawBitmap(bitmap2, marginLeft, marginTop, null);
return overlayBitmap;
}
Run Code Online (Sandbox Code Playgroud)