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;
}
}
运行效果