专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

Android自定义View之图形图像Bit地图

发布时间:2011-06-27 19:19:26 文章来源:www.iduyao.cn 采编人员:星星草
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轴对称:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: