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;

        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章