Bitmap,使用Matrix对图像几何变换
16lz
2021-01-26
【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(安卓)如何获取SDCard 内存(二)
- Android中画图总结(2)
- 热修复
- Android(安卓)应用跳转到指定QQ临时聊天界面
- android之PackageManager简介
- [Android]根据名称name来获取string的值
- Android: SDCard容量计算
- Android(安卓)Bitmap详解
- Android(安卓)项目如何获取MD5和SHA1