一个特别有用的方法对是setScale和postTranslate,它们允许跨单个轴(或者两个轴)翻转图像。如果以一个负数缩放,那么会将该图像绘制到坐标系统的负值空间。由于(0,0)点位于左上角,使用x轴上的负数会导致向左绘制图像。因此我们需要使用postTranslate方法,将图像向右移动,如图3-12所示。
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);
6. 翻转
可以在y轴上做同样的事情,翻转图像以使其倒置。通过将图像围绕两个轴上的中心点旋转180°,可以实现相同的效果,如图3-13所示。
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());
7. 绘制替代图像
在之前的小节中,所使用方法的缺点之一是图像会被截断,因为没有计算转换后的结果大小,仅仅以预先确定的大小绘制到一个位图对象中。
解决这个问题的方法之一是:当初次创建位图对象时,应用Matrix对象而不是绘制到一个空的位图对象中。
通过这种方式,将无须再获得Canvas和Paint对象。缺点是不能继续更改位图对象,因为如果想要对其进行任何转换,那么都需要重新创建它。
在Bitmap类中存在一个静态方法createBitmap能够实现以上功能。第一个参数是源位图对象,接下来的参数分别是来自源图像的初始的x、y、宽度和高度值,随后是所应用的Matrix对象,最后是一个布尔值,表示是否在图像上应用某种过滤器。由于没有应用包含过滤器的矩阵(将在本章后面讨论),将其设置为false。