正文

基本的图像缩放和旋转(3)

Android多媒体开发高级编程 作者:(美)艾佛瑞


正如在图3-6中所看到的那样,这会导致图像倾斜。它是因为第一行数字而倾斜,其操作每个像素的x值,根据每个像素的y值进行改变。随着y值增加,因为向图像的下部移动,所以x值增加,从而导致图像倾斜。如果使用一个负值,那么图像将以相反的方向倾斜。同时,还将注意到该图像由于坐标变化而被截断。因此,如果要执行这样的操作,那么需要增加结果位图的大小,如图3-7所示。

alteredBitmap = Bitmap.createBitmap(bmp.getWidth()*2,bmp.getHeight(),

bmp.getConfig());

图3-7  应用相同的自定义矩阵后显示的第二幅图像,但采用更大的宽度以使图像不会被截断

这些矩阵转换非常强大;同时我们也会发现手动处理它们会很麻烦。但是,对于大部分想要通过手动处理矩阵而实现的工作,它们对应的公式所需要的数学知识超出了本书的范围。然而,如果有兴趣深入学习,那么网上有足够多的资源。一个好的起点是Wikipedia的Transformation Matrix(转换矩阵)文章:http://en.wikipedia.org/wiki/Transformation_matrix。

3.3.2  Matrix类的方法

然而,现在要做的是探索Matrix类的其他方法,因为它们帮助我们完成了大部分想要完成的工作,而无须重新学习高中和大学数学课程。

与自己创建Matrix对象中的数字不同,针对想要使用的转换,可以简单地调用相应的方法。

下述的每个代码片段都可以替换“在位图上绘制位图”示例中的canvas.drawBitmap代码行。

1. 旋转

内置的方法之一是setRotate方法。它采用一个浮点数表示旋转的角度。围绕默认点(0,0),正数将顺时针旋转图像,而负数将逆时针旋转图像,其中默认点是图像的左上角,如图3-8所示。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号