import
android.app.Activity;
import
android.graphics.Bitmap;
import
android.graphics.Canvas;
import
android.graphics.Rect;
import
android.graphics.drawable.BitmapDrawable;
import
android.os.Bundle;
import
android.os.Handler;
import
android.os.Handler.Callback;
import
android.os.Message;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.ImageView;
public
class
MainActivity
extends
Activity {
private
ImageView ivBmp1;
private
ImageView ivBmp2;
private
ImageView ivBmpMerge;
private
Button mergeBtn;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
initUi();
}
private
void
initUi() {
ivBmp1
= (ImageView) findViewById(R.id.iv_bmp1);
ivBmp2
= (ImageView) findViewById(R.id.iv_bmp2);
ivBmpMerge
= (ImageView) findViewById(R.id.iv_bmp_merge);
mergeBtn
= (Button) findViewById(R.id.btn_merge);
mergeBtn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
showMergeBitmap();
}
});
}
private
Handler handler =
new
Handler(
new
Callback() {
@Override
public
boolean
handleMessage(Message msg) {
Bitmap
bitmap = (Bitmap) msg.obj;
ivBmpMerge.setImageBitmap(bitmap);
return
false
;
}
});
/**
*
显示合并的图
*/
protected
void
showMergeBitmap() {
new
Thread(
new
Runnable() {
@Override
public
void
run() {
Bitmap
bitmap = mergeBitmap();
Message
messge = handler.obtainMessage();
messge.obj
= bitmap;
handler.sendMessage(messge);
}
}).start();
}
/*
*
使用Canvas合并Bitmap
*/
private
Bitmap mergeBitmap() {
//
获取ImageView上得Bitmap图片
Bitmap
bmp1 = ((BitmapDrawable) ivBmp1.getDrawable()).getBitmap();
Bitmap
bmp2 = ((BitmapDrawable) ivBmp2.getDrawable()).getBitmap();
//
创建空得背景bitmap
//
生成画布图像
Bitmap
resultBitmap = Bitmap.createBitmap(ivBmpMerge.getWidth(),
ivBmpMerge.getHeight(),
Bitmap.Config.RGB_565);
Canvas
canvas =
new
Canvas(resultBitmap);
//
使用空白图片生成canvas
//
将bmp1绘制在画布上
Rect
srcRect =
new
Rect(
0
,
0
,
bmp1.getWidth(), bmp1.getHeight());
//
截取bmp1中的矩形区域
Rect
dstRect =
new
Rect(
0
,
0
,
ivBmpMerge.getWidth() /
2
,
ivBmpMerge.getHeight());
//
bmp1在目标画布中的位置
canvas.drawBitmap(bmp1,
srcRect, dstRect,
null
);
//
将bmp2绘制在画布上
srcRect
=
new
Rect(
0
,
0
,
bmp2.getWidth(), bmp2.getHeight());
//
截取bmp1中的矩形区域
dstRect
=
new
Rect(ivBmpMerge.getWidth() /
2
,
0
,
ivBmpMerge.getWidth(),
ivBmpMerge.getHeight());
//
bmp2在目标画布中的位置
canvas.drawBitmap(bmp2,
srcRect, dstRect,
null
);
//
将bmp1,bmp2合并显示
return
resultBitmap;
}
}
运行效果