Android 矩阵前奏

提示:

矩阵这个词是无意间想起来的,在美颜相机里发现可以给不同的照片 设置色彩,很好奇就百度搜了一下,发现原来是用矩阵实现的,并且分为颜色矩阵和普通矩阵,也懒的写了,就随便敲了几行代码保存起来, 以后有时间弄懂了再来补充

矩阵:图片出现倒置,拉伸变形,通过矩阵对图片进行处理 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;

        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值