您的位置:首页 > 其它

Bitmap,使用Matrix对图像几何变换

2015-09-17 20:11 375 查看

【Bitmap】

Android几种简单的获取Bitmap位图实例

1、通过BitmapFactory获取

BitmapFactory.decodeResource(Resources res, int Id); //参数一:资源实例 参数二:资源ID

2、通过Bitmap获取任意宽高或获取位图中任意区域

Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height);//参数一:位图资源

3获取一个BitmapDrawable包装的Bitmap对象

Bitmap bitmap=drawable.getBitmap();

【Matrix】

Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。

下面直接操作



public class MyBitmapView extends View {
    private int width;
    private int height;
    private Paint paint;
    private Matrix matrix;
    private int BitmapWidth;
    private int BitmapHeight;
    private Bitmap bitmap;

    public MyBitmapView(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint=new Paint();
        paint.setAlpha(150);

        matrix=new Matrix();
    }

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

        bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.abc);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        BitmapHeight=bitmap.getHeight();
        BitmapWidth=bitmap.getWidth();
        //缩放
        matrix.reset();
        matrix.postScale(2, 2) ;
        canvas.drawBitmap(bitmap, matrix, paint);

        //平移
        matrix.reset();
        matrix.postTranslate(0, BitmapHeight);
        canvas.drawBitmap(bitmap, matrix, paint);

        //旋转180°,平移
        matrix.reset();
        matrix.postRotate(180);
        matrix.postTranslate(BitmapWidth * 3, BitmapHeight * 3);
        canvas.drawBitmap(bitmap, matrix, paint);

        //侧切
        matrix.reset();
        matrix.postSkew(0, 1);
        canvas.drawBitmap(bitmap, matrix, paint);

        //水平对称
        matrix.reset();
        float matrix_values[]={1f,0f,0f,0f,-1f,0f,0f,0f,1f};
        matrix.setValues(matrix_values);
        matrix.postTranslate(0, BitmapHeight * 3);
        canvas.drawBitmap(bitmap, matrix, paint);

       //垂直对称
        matrix.reset();
        float matrix_values2[]={-1f,0f,0f,0f,1f,0f,0f,0f,1f};
        matrix.setValues(matrix_values2);
        matrix.postTranslate(BitmapWidth*3,0);
        canvas.drawBitmap(bitmap,matrix,paint);

    }

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

    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: