Android自定義View之圖形圖像Bitmap

概述:

BitMap代表一張位圖,擴展名可以是.bmp或者.dib。位圖是Windows標準格式圖形文件,它將圖像定義爲由點(像素)組成,每個點可以由多種色彩表示,包括2、4、8、16、24和32位色彩。。
在android系統當中,bitmap是圖像處理最重要的類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、縮放、對稱等操作,並可以指定格式保存圖像文件。

Bitmap的各種操作:

demo

首先,寫一個自定義View:

public class MyBitmapView extends View {
    private int width;
    private int height;

    private int mBitmapWidth;
    private int mBitmapHeight;

    private Paint mPaint;
    private Bitmap mBitmap;
    private Matrix matrix;
    public MyBitmapView(Context context) {
        super(context);
    }

    public MyBitmapView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();

        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.aa);
        mBitmapWidth = mBitmap.getWidth();
        mBitmapHeight = mBitmap.getHeight();
        matrix = new Matrix();

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
        height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
        setMeasuredDimension(width, height);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //平移圖像,參數:水平相移量,垂直相移量
        matrix.postTranslate(mBitmapWidth, mBitmapHeight);
        canvas.drawBitmap(mBitmap, matrix, mPaint);

        //重置matrix,以前的狀態會消失
        matrix.reset();
        //將圖像放大,參數:水平放大倍數,垂直放大倍數;如果小於1,則是縮小
        matrix.postScale(2, 2);
        canvas.drawBitmap(mBitmap, matrix, mPaint);
        matrix.reset();
        canvas.drawBitmap(mBitmap, 0, 0, mPaint);

        matrix.reset();
        canvas.drawBitmap(mBitmap, 0, 0, mPaint);
        //將圖形選擇180度,旋轉後的圖形位置會發生變化
        matrix.postRotate(180);
        matrix.postTranslate(mBitmapWidth*2,mBitmapHeight*2);
        canvas.drawBitmap(mBitmap, matrix, mPaint);

        //側切
        canvas.drawBitmap(mBitmap,0,0,mPaint);
        matrix.reset();
        //側切一個圖像,實際上是將圖像右下角的x,y座標增加參數倍,這裏x座標不變,y座標增加一倍
        matrix.postSkew(0,1);
        canvas.drawBitmap(mBitmap,matrix,mPaint);

        //x軸對稱
        matrix.reset();
        canvas.drawBitmap(mBitmap, 0, 0, mPaint);
        float values[] = {1f,0f,0f,0f,-1f, 0f, 0f, 0f,1f};
        //此方法作出的處理是:讓圖片的矩陣與傳入的矩陣相乘
        matrix.setValues(values);
        matrix.postTranslate(0, mBitmapHeight * 2);
        canvas.drawBitmap(mBitmap,matrix,mPaint);

        //y軸對稱
        matrix.reset();
        canvas.drawBitmap(mBitmap,0,0,mPaint);
        float values2[] = {-1f,0f,1f,0f,1f, 0f, 0f, 0f,1f};
        matrix.setValues(values2);
        matrix.postTranslate(mBitmapWidth*2,0);
        canvas.drawBitmap(mBitmap,matrix,mPaint);

    }
}

結果演示:

平移:
這裏寫圖片描述

縮放:
這裏寫圖片描述

旋轉:
這裏寫圖片描述

側切:
這裏寫圖片描述

x軸對稱:
這裏寫圖片描述

y軸對稱:
這裏寫圖片描述

我們猿類工作壓力大,很需要有自己的樂趣,於是乎,我開通了音樂人賬號,以後的作品將會上傳到我的音樂人小站上。如果這篇博客幫助到您,希望您能多關注,支持,鼓勵我將創作進行下去,同時也祝你能在工作和生活樂趣兩發麪都能出彩!

網易雲音樂人,直接打開客戶端搜索音樂人 “星河河”

豆瓣音樂人地址:https://site.douban.com/chuxinghe/ 星河河

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