提示:
矩阵这个词是无意间想起来的,在美颜相机里发现可以给不同的照片 设置色彩,很好奇就百度搜了一下,发现原来是用矩阵实现的,并且分为颜色矩阵和普通矩阵,也懒的写了,就随便敲了几行代码保存起来, 以后有时间弄懂了再来补充
矩阵:图片出现倒置,拉伸变形,通过矩阵对图片进行处理 pro:前乘 post:后乘
public class MainActivity extends Activity implements View.OnClickListener {
private Button mB,mB2,mB3,mB4;
private ImageView mIv,mIv2;
private Bitmap bitmap;
private Bitmap newBitmap;//处理之后的图片
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
initView();
}
private void initView() {
mB=(Button) findViewById(R.id.mB);
mB2=(Button) findViewById(R.id.mB2);
mB3=(Button) findViewById(R.id.mB3);
mB4=(Button) findViewById(R.id.mB4);
mIv=(ImageView) findViewById(R.id.mIv);
mIv2=(ImageView) findViewById(R.id.mIv2);
mIv2.setImageBitmap(bitmap);
mB.setOnClickListener(this);
mB2.setOnClickListener(this);
mB3.setOnClickListener(this);
mB4.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int ID = v.getId();
switch (ID) {
case R.id.mB://缩放
//1.创建一个新的图片,用来进行处理
newBitmap=Bitmap.createBitmap(bitmap.getWidth()/2, bitmap.getHeight()/2, Bitmap.Config.ARGB_4444);
//2.创建一个矩阵,用来对图片进行处理
Matrix matrix=new Matrix();
//3.矩阵处理图片的公式
matrix.postScale(0.5f,0.5f);
//4.将新创的图片当作画板
Canvas canvas=new Canvas(newBitmap);
//5.根据写的处理公式,用过画布对图片进行矩阵处理
canvas.drawBitmap(bitmap, matrix, null);
//6.将处理完的图片设置给控件
mIv.setImageBitmap(newBitmap);
break;
case R.id.mB2://平移
newBitmap=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_4444);
Matrix matrix2=new Matrix();
matrix2.postTranslate(0f, 50f);
Canvas canvas2=new Canvas(newBitmap);
canvas2.drawBitmap(bitmap, matrix2, null);
mIv.setImageBitmap(newBitmap);
break;
case R.id.mB3:
//旋转
Matrix matrix3=new Matrix();
newBitmap=Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_4444);
Canvas canvas3=new Canvas(newBitmap);
matrix3.postRotate(180, bitmap.getWidth()/2, bitmap.getHeight()/2);
canvas3.drawBitmap(bitmap, matrix3, null);
mIv.setImageBitmap(newBitmap);
break;
case R.id.mB4:
//错切
newBitmap=Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_4444);
Matrix matrix4=new Matrix();
Canvas canvas4=new Canvas(newBitmap);
matrix4.postSkew(1f, 0f);
canvas4.drawBitmap(bitmap, matrix4, null);
mIv.setImageBitmap(newBitmap);
break;
}
}
}