Bitmap,使用Matrix对图像几何变换
2015-09-17 20:11
375 查看
【Bitmap】
Android几种简单的获取Bitmap位图实例1、通过BitmapFactory获取
BitmapFactory.decodeResource(Resources res, int Id); //参数一:资源实例 参数二:资源ID
2、通过Bitmap获取任意宽高或获取位图中任意区域
Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height);//参数一:位图资源
3获取一个BitmapDrawable包装的Bitmap对象
Bitmap bitmap=drawable.getBitmap();
【Matrix】
Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。下面直接操作
public class MyBitmapView extends View { private int width; private int height; private Paint paint; private Matrix matrix; private int BitmapWidth; private int BitmapHeight; private Bitmap bitmap; public MyBitmapView(Context context, AttributeSet attrs) { super(context, attrs); paint=new Paint(); paint.setAlpha(150); matrix=new Matrix(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.abc); canvas.drawBitmap(bitmap, 0, 0, paint); BitmapHeight=bitmap.getHeight(); BitmapWidth=bitmap.getWidth(); //缩放 matrix.reset(); matrix.postScale(2, 2) ; canvas.drawBitmap(bitmap, matrix, paint); //平移 matrix.reset(); matrix.postTranslate(0, BitmapHeight); canvas.drawBitmap(bitmap, matrix, paint); //旋转180°,平移 matrix.reset(); matrix.postRotate(180); matrix.postTranslate(BitmapWidth * 3, BitmapHeight * 3); canvas.drawBitmap(bitmap, matrix, paint); //侧切 matrix.reset(); matrix.postSkew(0, 1); canvas.drawBitmap(bitmap, matrix, paint); //水平对称 matrix.reset(); float matrix_values[]={1f,0f,0f,0f,-1f,0f,0f,0f,1f}; matrix.setValues(matrix_values); matrix.postTranslate(0, BitmapHeight * 3); canvas.drawBitmap(bitmap, matrix, paint); //垂直对称 matrix.reset(); float matrix_values2[]={-1f,0f,0f,0f,1f,0f,0f,0f,1f}; matrix.setValues(matrix_values2); matrix.postTranslate(BitmapWidth*3,0); canvas.drawBitmap(bitmap,matrix,paint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); setMeasuredDimension(width, height); } }
相关文章推荐
- Android布局属性LayoutParams的理解
- HDU 整除的尾数 2099
- CTC模型
- BDFProxy
- SQL SERVER中 用FOR XML PATH将查询结果以XML输出 然后应用于 sql 合并字段功能介绍
- LATEX双栏最后一页如何平衡两栏内容
- hdu5135Little Zu Chongzhi's Triangles dfs
- HTML5中canvas的save和restore方法
- 归并排序方法
- Oracle 触发器数据同步
- AngularJS进阶(六)AngularJS+BootStrap实现弹出对话框
- Android MediaPlayer 播放本地与远程的mp3初步
- 单例懒汉式的多线程操作的安全问题
- shell脚本 集成测试多个UiAutomator case类
- AngularJS进阶(六)AngularJS+BootStrap实现弹出对话框
- css问题
- Linux中select poll和epoll的区别
- 正规子群
- 自定义listview出现android.view.InflateException:Binary xml file line#
- HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(博弈)