更新时间:2022-09-12 10:28:56
Matrix
对于一个图片变换的处理,需要Matrix类的支持,它位于"android.graphics.Matrix"包下,是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与其他API结合来控制图形、View的变换,如Canvas。
Matrix提供了一些方法来控制图片变换:
之前有提过,图片在内存中存放的就是一个一个的像素点,而对于图片的变换主要是处理图片的每个像素点,对每个像素点进行相应的变换,即可完成对图像的变换。上面已经列举了Matrix进行变换的常用方法,下面以几个Demo来讲解一下如何通过Matrix进行变换。
代码:
1 /** 2 * 缩放图片 3 */ 4 protected void bitmapScale(float x, float y) { 5 // 因为要将图片放大,所以要根据放大的尺寸重新创建Bitmap 6 Bitmap afterBitmap = Bitmap.createBitmap( 7 (int) (baseBitmap.getWidth() * x), 8 (int) (baseBitmap.getHeight() * y), baseBitmap.getConfig()); 9 Canvas canvas = new Canvas(afterBitmap); 10 // 初始化Matrix对象 11 Matrix matrix = new Matrix(); 12 // 根据传入的参数设置缩放比例 13 matrix.setScale(x, y); 14 // 根据缩放比例,把图片draw到Canvas上 15 canvas.drawBitmap(baseBitmap, matrix,paint); 16 iv_after.setImageBitmap(afterBitmap); 17 }
效果展示:
代码:
1 /** 2 * 图片旋转 3 */ 4 protected void bitmapRotate(float degrees) { 5 // 创建一个和原图一样大小的图片 6 Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), 7 baseBitmap.getHeight(), baseBitmap.getConfig()); 8 Canvas canvas = new Canvas(afterBitmap); 9 Matrix matrix = new Matrix(); 10 // 根据原图的中心位置旋转 11 matrix.setRotate(degrees, baseBitmap.getWidth() / 2, 12 baseBitmap.getHeight() / 2); 13 canvas.drawBitmap(baseBitmap, matrix, paint); 14 iv_after.setImageBitmap(afterBitmap); 15 }
效果展示:
代码:
1 /** 2 * 图片移动 3 */ 4 protected void bitmapTranslate(float dx, float dy) { 5 // 需要根据移动的距离来创建图片的拷贝图大小 6 Bitmap afterBitmap = Bitmap.createBitmap( 7 (int) (baseBitmap.getWidth() + dx), 8 (int) (baseBitmap.getHeight() + dy), baseBitmap.getConfig()); 9 Canvas canvas = new Canvas(afterBitmap); 10 Matrix matrix = new Matrix(); 11 // 设置移动的距离 12 matrix.setTranslate(dx, dy); 13 canvas.drawBitmap(baseBitmap, matrix, paint); 14 iv_after.setImageBitmap(afterBitmap); 15 }
效果展示:
代码:
1 /** 2 * 倾斜图片 3 */ 4 protected void bitmapSkew(float dx, float dy) { 5 // 根据图片的倾斜比例,计算变换后图片的大小, 6 Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth() 7 + (int) (baseBitmap.getWidth() * dx), baseBitmap.getHeight() 8 + (int) (baseBitmap.getHeight() * dy), baseBitmap.getConfig()); 9 Canvas canvas = new Canvas(afterBitmap); 10 Matrix matrix = new Matrix(); 11 // 设置图片倾斜的比例 12 matrix.setSkew(dx, dy); 13 canvas.drawBitmap(baseBitmap, matrix, paint); 14 iv_after.setImageBitmap(afterBitmap); 15 }
效果展示:
上面几个小方法演示了如何使用Matrix进行变换,但是还有几点需要额外注意一下:
下面给出本篇博客讲解的使用Matrix的完整Demo代码。
布局代码:
实现代码:
本文转自承香墨影博客园博客,原文链接:http://www.cnblogs.com/plokmju/p/android_Matrix.html,如需转载请自行联系原作者