Android——动态缩放图片

本文介绍在Android自定义View中实现图片动态缩放的方法,包括使用Canvas的scale方法、Matrix配合Canvas以及直接利用Bitmap.createBitmap进行缩放的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习自定义view控件的过程碰到需要根据控件本身的大小动态绘制图片,主要用到了以下三种方法进行图像缩放

首先,先从文件资源里加载bitmap

Bitmap bitmpSrc=BitmapFactory.decodeResource(getResources(),R.drawable.img1);
//取得图片本身宽和高
int srcW=bitmapSrc.getWidth();
int srcH=bitmapSrc.getHeight();

//还要在onMeasure中获得当前的view的宽和高
width=MeasureSpec.getSize(widthMeasureSpec);
height=MeasureSpec.getHeight(heightMeasureSpec);

//计算缩放比例
scaleW=width*1.0f/srcW;
scaleH=height*1.0f/srcH;

下面介绍三种bitmap的缩放操作(Bitmap图片本身不能改变的,要通过新建一张Bitmap,在上面绘制图像)

1.利用canvas本身的scale

//创建一个View大小的Bitmap;
Bitmap bm=Bitmap.create(width,height,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bm);//在新建的bm上绘制
canvas.scale(scaleW,scaleH);//将画布结构先进行缩放
canvas.drawBitmap(bitmap,0,0,null);//在画布上绘制bitmap(这张画布是在bm上的,所以实际是在bm上绘制bitmap)

/** canvas.drawBitmap(Bitmap source,float left,float top,Paint paint)
*@param Bitmap source ,源文件
*@param float left,从距离左边left开始绘制
*@param float top,从距离上面top绘制
*@param Paint paint,使用的画笔
*@return
**/

2.使用Matrix 来配合canvas完成缩放

//同样根据view大小创建bitmap
Bitmap bm=Bitmap.create(width,height,Bitmap.Config.ARGB_8888);
Canvas canvas= new Canvas(bm);
Matrix matrix=new Matrix();
matrix.setScale(scaleW,scaleH);
canvas.drawBitmap(bitmap,matrix,null);//使用matrix完成了缩放

/** canvas.drawBitmap(Bitmap source,Matrix matrix,Paint paint)
*@param Bitmap source ,源文件
*@param Matrix matrix,变换矩阵3*3,可以完成一系列变换,不只是缩放
*@param Paint paint,使用的画笔
*@return
**/

3.不使用Canvas,直接通过Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)

Matrix matrix=new Matrix();
matrix.setScale(scaleW,scaleH);
Bitmap bm=Bitmap.createBitmap(bitmap, 0, 0, srcW,srcH, matrix, true );//这种方法好像是最简单的,不需要
//Canvas的辅助,最终生成的bitmap大小也是动态的

/** createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
*@param Bitmap source ,源文件
*@param int x,从源图像水平方向x选取图像开始绘制到目标图像
*@param int  y,从源图像竖直方向y选取图像开始绘制到目标图像
*@param int  width,注意,要画源图像从x开始多宽的图像
*@param int height ,注意,要画源图像从y开始多高的图像
*@param Matrix matrix,变换的矩阵
*@param bolean filter,当进行的不只是平移变换时,filter参数为true可以进行滤波处理,有助于改善新图像质量;flase时,计算机不做过滤处理
*@return
**/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值