两个bitmap重叠覆盖
现在要把一个小的bitmap覆盖到一个大的bitmap的中心
形成一个新的bitmap
先固定2个bitmap的大小
Bitmap bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1);
Bitmap head1 = BitmapFactory.decodeResource(getResources(), R.drawable.head1);
Bitmap bg = compressBitmapToGivenWidthAndHeight(bg1, 200, 200);
Bitmap head = compressBitmapToGivenWidthAndHeight(head1, 40, 40);
public static Bitmap compressBitmapToGivenWidthAndHeight(Bitmap bitmap, double newWidth, double newHeight) {
//获取这个图片的宽和高
float width = bitmap.getWidth();
float height = bitmap.getHeight();
//创建操作图片用的matrix对象
Matrix matrix = new Matrix();
//计算宽高缩放率
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
//压缩Bitmap
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, (int) width, (int) height, matrix, true);
return newBitmap;
}
然后创建新的bitmap
Bitmap bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bg, 0, 0, null);
canvas.drawBitmap(head, 80, 80, null);
这样新的bitmap就有了
可以再把这个bitmap输出到本地
saveBitmapToLocal(bitmap, "/sdcard/abc.png");
public static boolean saveBitmapToLocal(Bitmap bitmap, String path) {
//根据路径创建File
File file = new File(path);
//如果这个路径存在文件,就删除它
if (file.exists()) {
file.delete();
}
try {
//创建文件输出流
FileOutputStream out = new FileOutputStream(file);
//输出图片
boolean compress = bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
//保存成功了
if (compress) {
return compress;
}
//刷新流,关流
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//保存失败了
return false;
}