/***
* 返回与显示控件宽高比相同的图片
* @param bitmap 原图
* @param widthImgv ImageView的宽
* @param heightImgv ImageView的高
* @return 裁剪或者拼接后后的图片
*/
private Bitmap clipBitmap(Bitmap bitmap,int widthImgv,int heightImgv) {
Log.i(TAG,"bitmap = "+bitmap.getWidth()*bitmap.getHeight());
//显示的 ImageView 的高宽比
float ratio = heightImgv * 1.0f / widthImgv;
//bitmap的宽高
int widthBitmap = bitmap.getWidth();
int heightBitmap = bitmap.getHeight();
//按照显示的 ImageView 的高宽比来的话,bitmap应该有的高度
int finalHeight = (int) (widthBitmap * ratio);
if (finalHeight < heightBitmap){
// 创建空得背景bitmap,宽:原图的宽,高:最终高finalHeight
Bitmap resultBitmap = Bitmap.createBitmap(widthBitmap, finalHeight, Bitmap.Config.RGB_565);
// 使用空白图片生成canvas
Canvas canvas = new Canvas(resultBitmap);
//源图-尺寸
Rect srcRect = new Rect(0, 0,widthBitmap,finalHeight);
//目标-位置
Rect dstRect = new Rect(0, 0, widthBitmap,finalHeight);
canvas.drawBitmap(bitmap, srcRect, dstRect, null);
return resultBitmap;
}else {
//图片高度不够,还差的高度,用空白背景渲染(黑色或者白色等)
int marginHeight = finalHeight - heightBitmap;
// 创建空得背景bitmap,宽:原图的宽,高:最终高finalHeight
Bitmap resultBitmap = Bitmap.createBitmap(widthBitmap, finalHeight, Bitmap.Config.RGB_565);
// 使用空白图片生成canvas
Canvas canvas = new Canvas(resultBitmap);
//第一步先把原图全部画上去
//源图-尺寸
Rect srcRect = new Rect(0, 0,widthBitmap,heightBitmap);
//目标-位置
Rect dstRect = new Rect(0, 0, widthBitmap,heightBitmap);
canvas.drawBitmap(bitmap, srcRect, dstRect, null);
//第二步,将留白画上
Bitmap emptyBitmap = Bitmap.createBitmap(widthBitmap,marginHeight,Bitmap.Config.RGB_565);
emptyBitmap.eraseColor(Color.WHITE);
//源图-尺寸
Rect srcRect2 = new Rect(0, 0,widthBitmap,marginHeight);
//目标-位置
Rect dstRect2 = new Rect(0, heightBitmap, widthBitmap,finalHeight);
canvas.drawBitmap(emptyBitmap,srcRect2,dstRect2,null);
return resultBitmap;
}
}
Android canvas.drawBitmap实现图片拼接
最新推荐文章于 2023-10-08 16:47:16 发布