1.输入矩阵:
Matrix矩阵类,当现有位图对象上进行绘制或从另一个位图对象创建某个位图时,可以使用该类。
Matrix矩阵类的每个数字都应用于图像上每个点的3个坐标(x,y或z)之一:
如:1 , 0 , 0,
0, 1, 0,
0, 0, 1
第一行:指定x坐标:x=1x+0y+0z;
第二行:指定y坐标:y=0x+1y+oz;
第三行:指定z坐标:z=0x+0y+1z;
Matrix matrix=new Matrix(); matrix.setValues(new float[]{ 1,0.5f,0, 0,1,0, 0,0,1 }); canvas.drawBitmap(bmp, matrix, paint); copyPicture.setImageBitmap(alteredBitmap);在需要增加结果位图大小是可以设置:
alteredBitmap = Bitmap.createBitmap(bmp.getWidth()*2,
bmp.getWidth(), bmp.getConfig());
2.Matrix类的方法
(1)旋转:
Matrix matrix=new Matrix();
//matrix.setRotate(15);/*旋转的角度,围绕默认点(0,0),正数顺时针旋转,负数逆时针旋转,默认点是图像左上角*/
matrix.setRotate(15, bmp.getWidth()/2,bmp.getHeight()/2);//中心旋转
canvas.drawBitmap(bmp, matrix, paint);
(2)缩放:
matrix.setScale(1.5f, 1);//缩放,第一个参数x轴的缩放比例,第二个参数y轴的缩放比例。
(3)平移:
matrix.setTranslate(1.5f, -10);//平移,第一个参数x轴的移动数量,第二个参数y轴的移动数量。
(4)镜像:
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(), 0);//向右移动
(5)翻转:
matrix.setScale(1,-1);
matrix.postTranslate(0, bmp.getHeight());//向下移动
(6)绘制替代图像:
以前所使用的方法的缺点是图像会被截断,因为没有计算转换后的结果大小。解决方法:当初次创建位图对象时,应用Matrix对象而不是绘制到一个空的位图对象中。
通过这种方式无需再获得Canvas和Paint对象。缺点是不能再更改位图对象。
在Bitmap类中存在一个静态方法createBitmap.
Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);//参数不再说明。
示例:
Matrix matrix=new Matrix(); matrix.setRotate(15, bmp.getWidth()/2,bmp.getHeight()/2);//中心旋转 Bitmap alteredBitmap=Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);
copyPicture.setImageBitmap(alteredBitmap);
原文地址:http://blog.csdn.net/woyaochenggong774/article/details/45096601