Android——动态缩放图片
来源:互联网 发布:mac安装win10启动黑屏 编辑:程序博客网 时间:2024/06/05 08:48
最近学习自定义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大小创建bitmapBitmap 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**/
0 0
- Android——动态缩放图片
- android——图片缩放(双击放大、手势缩放)
- Android之——根据手势简单缩放图片
- Android 图片缩放
- Android 图片缩放-Matrix
- android图片的缩放
- android图片的缩放
- Android 图片缩放-Matrix
- android图片的缩放 .
- android 两点缩放图片
- android ImageView图片缩放
- android 图片缩放
- android 图片缩放
- android 两点缩放图片
- Android图片缩放方法
- android 图片缩放
- Android 缩放图片
- android缩放图片
- 返回一个参数中二进制数中1的个数
- 输错密码?这个 sudo 会“嘲讽”你
- 统计学-简单统计概念
- c++ const_cast and reinterpret_cast
- 汉诺塔(四) nyoj 1078
- Android——动态缩放图片
- 【36】按层打印二叉树
- CSS -Counter
- Spring-EhCache配置实例
- PHP知识体系思维导图
- C和指针—结构体和联合
- HDU 1170
- iOS_面试题
- IT运维流程 — ITIL