Android——动态缩放图片
2016-05-14 16:43
351 查看
最近学习自定义view控件的过程碰到需要根据控件本身的大小动态绘制图片,主要用到了以下三种方法进行图像缩放
首先,先从文件资源里加载bitmap
下面介绍三种bitmap的缩放操作(Bitmap图片本身不能改变的,要通过新建一张Bitmap,在上面绘制图像)
1.利用canvas本身的scale
2.使用Matrix 来配合canvas完成缩放
3.不使用Canvas,直接通过Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
首先,先从文件资源里加载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 **/
相关文章推荐
- Android中的Canvas
- Android ListView、GridView等性能优化
- Palette(调色板)
- android开发笔记之多媒体—小图片的加载
- android 如何创建快捷小图标
- Android系统中Parcelable和Serializable的区别
- 【转】Android 防破解技术简介
- android开发笔记之多媒体—图形图像处理
- Android Studio 工程的 .gitignore
- Android之Intent 序列化反序列化
- Android之用SingleTask和TaskAffinity解决手机截取的项目启动页面问题
- 大量 Material Design 学习资源
- android中关于位移动画TranslateAnimation开始和结束时闪动问题的记录
- android-----带你一步一步优化ListView(一)
- Android中的Rect类——奇葩的思维
- android:width与android:layout_width的区别
- 第一章:Android概论解析
- Android Studio安装
- Android AutoLayout自适应的适配方式
- Android数据存储方式