Android自定义View之图形图像Bitmap
2015-09-17 20:14
399 查看
概述:
BitMap代表一张位图,扩展名可以是.bmp或者.dib。位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩。。在android系统当中,bitmap是图像处理最重要的类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放、对称等操作,并可以指定格式保存图像文件。
Bitmap的各种操作:
demo
首先,写一个自定义View:public class MyBitmapView extends View { private int width; private int height; private int mBitmapWidth; private int mBitmapHeight; private Paint mPaint; private Bitmap mBitmap; private Matrix matrix; public MyBitmapView(Context context) { super(context); } public MyBitmapView(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(); mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.aa); mBitmapWidth = mBitmap.getWidth(); mBitmapHeight = mBitmap.getHeight(); matrix = new Matrix(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //平移图像,参数:水平相移量,垂直相移量 matrix.postTranslate(mBitmapWidth, mBitmapHeight); canvas.drawBitmap(mBitmap, matrix, mPaint); //重置matrix,以前的状态会消失 matrix.reset(); //将图像放大,参数:水平放大倍数,垂直放大倍数;如果小于1,则是缩小 matrix.postScale(2, 2); canvas.drawBitmap(mBitmap, matrix, mPaint); matrix.reset(); canvas.drawBitmap(mBitmap, 0, 0, mPaint); matrix.reset(); canvas.drawBitmap(mBitmap, 0, 0, mPaint); //将图形选择180度,旋转后的图形位置会发生变化 matrix.postRotate(180); matrix.postTranslate(mBitmapWidth*2,mBitmapHeight*2); canvas.drawBitmap(mBitmap, matrix, mPaint); //侧切 canvas.drawBitmap(mBitmap,0,0,mPaint); matrix.reset(); //侧切一个图像,实际上是将图像右下角的x,y坐标增加参数倍,这里x坐标不变,y坐标增加一倍 matrix.postSkew(0,1); canvas.drawBitmap(mBitmap,matrix,mPaint); //x轴对称 matrix.reset(); canvas.drawBitmap(mBitmap, 0, 0, mPaint); float values[] = {1f,0f,0f,0f,-1f, 0f, 0f, 0f,1f}; //此方法作出的处理是:让图片的矩阵与传入的矩阵相乘 matrix.setValues(values); matrix.postTranslate(0, mBitmapHeight * 2); canvas.drawBitmap(mBitmap,matrix,mPaint); //y轴对称 matrix.reset(); canvas.drawBitmap(mBitmap,0,0,mPaint); float values2[] = {-1f,0f,1f,0f,1f, 0f, 0f, 0f,1f}; matrix.setValues(values2); matrix.postTranslate(mBitmapWidth*2,0); canvas.drawBitmap(mBitmap,matrix,mPaint); } }
结果演示:
平移:缩放:
旋转:
侧切:
x轴对称:
y轴对称:
相关文章推荐
- Android系列之Fragment(一)----Fragment加载到Activity当中
- Android--Android教程]EditText设置/隐藏光标位置、选中文本和获取/清除焦点
- Android布局属性LayoutParams的理解
- Android MediaPlayer 播放本地与远程的mp3初步
- 自定义listview出现android.view.InflateException:Binary xml file line#
- Android如何正确的保存文件
- android layouts之RelativeLayout
- Android如何正确的保存文件
- Android LayerDrawable
- Android四大基本组件介绍与生命周期
- android学习:service的创建,打开、关闭一个service
- Android 加密解密Base64
- android绘图Path类仿加速球水面波动效果
- ColorDrawable 不起作用
- Android蓝牙大功率电机多频点/无极调速控制
- Android自定义View之图形图像工具类Path的特殊用法
- Android图片加载优化--图片缓存
- Android 笔记8
- Android下使用全局变量
- Android5.0源码开发之launcher切换语言后Folder和ShortcutT没有切换到当前语言