Matrix是android android.graphics下面提供的一个对bitmap操作缩放、位移、旋转、倾斜的工具类。
使用
一般是在Canvas中drawBitmap的时候提供一个matrix参数对draw做绘制处理,或者通过重新createBitmap提供一个
matrix参数生成一个新的bitmap;
通过bitmap构建一个canvs画布对象
Bitmap bit = Bitmap.createBitmap(bgWidth, bgHeight, Bitmap.Config.ARGB_8888);
Canvas canvs =new Canvas(bit);
//缩放 1是原始大小 2放大一倍 0.8就是按比例缩小到0.8 postScale一定要是float类型
Matrix matrix =new Matrix();
matrix.postScale(1,1);
//位移
matrix.setTranslate
//倾斜
matrix.setSkew
//旋转
matrix.setRotate
//绘制到canvas上
canvas.drawBitmap(background, matrix, null);
createBitmap
public Bitmap creA(Bitmap bitmap, int w, int h) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float scaleWidth = w / width;
float scaleHeight = h / height;
Matrix matrix = new Matrix();
matrix.setScale(scaleWidth, scaleHeight);
return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
}
对于一个从BitmapFactory.decodeXxx()方法加载的Bitmap对象而言,它是一个只读的,无法对其进行处理,必须使用Bitmap.createBitmap()方法重新创建一个Bitmap对象的拷贝,才可以对拷贝的Bitmap进行处理。
因为图像的变换是针对每一个像素点的,所以有些变换可能发生像素点的丢失,这里需要使用Paint.setAnitiAlias(boolean)设置来消除锯齿,这样图片变换后的效果会好很多。
在重新创建一个Bitmap对象的拷贝的时候,需要注意它的宽高,如果设置不妥,很可能变换后的像素点已经移动到"图片之外"去了。