用源Bitmap通过变换生成新的Bitmap的方法:
public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height, Matrix m, boolean filter)
public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height)
public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight,boolean filter)
第一个方法是最终的实现,后两种只是对第一种方法的封装。
第二个方法可以从源Bitmap中指定区域(x,y, width, height)中挖出一块来实现剪切;第三个方法可以把源Bitmap缩放为dstWidth x dstHeight的Bitmap。
经过图像变换之后的Bitmap里的数据可以保存到图像压缩文件里(G/PNG)。这个操作过程中,Bitmap.compress()方法的参数format可设置EG或PNG格式;quality可选择压缩质量;fOut是输出流(OutputStream),这里的FileOutputStream是OutputStream的一个子类。
3.4.2 Matrix
Android里面提供了对Matrix操作的一系列方便的接口。Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。
set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。
post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。
旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,是围绕(0,0)点来进行。
3.5 数据存储
3.5.1 Internal Storage
所谓的内部存储与外部存储,是指是否是手机内置。手机内置的存储空间,称为内部存储,它是手机一旦出厂就无法改变,它也是手机的硬件指标之一。内部存储空间十分有限,所以我们要尽可能避免使用;另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。
Android本身来讲是一个Linux操作系统,所以它的内部存储空间,对于应用程序和用户来讲就是“/data/data"目录。它与其他的(外部的存储)相比有着比较稳定,存储方便,操作简单,更加安全(因为可以控制访问权限)等优点。而它唯一的缺点就是它比较有限,比较可贵。
虽然,可以非常容易的知道程序本身的数据所在路径,所有的应用程序的数据路径都是“/data/data/app-package-name/”,所有的程序用到的数据,但我们在使用的时候最好不要,或是千万不要直接引用这个路径。
使用内部存储主要有二个方式,一个是文件操作,一个是文件夹操作。无论哪种方式,Context中都提供了相应的函数来支持,使用Context不但操作简单方便,最重要的是Context会帮助我们管理这些文件,也可以方便帮助我们控制文件的访问权限。
1. 创建一个文件,并打开成一个文件输出流,需要提供一个String,作为文件名。同样,想打开一个文件作为输入的话,也是只需要提供文件名。
FileOutputStream output = Context.openOutputFile(filename, Context.MODE_PRIVATE);
FileInputStream input = Context.openInputFile(filename);
2. 列出所有的已创建的文件。
String[] files = Context.fileList();
3. 删除文件。
Context.deleteFile(filename)
文件操作只需要向函数提供文件名,所以程序自己只需要文护文件名即可。不用自己去创建文件对象和输入、输出流,提供文件名就可以返回File对象或输入输出流。对于路径操作返回的都是文件对象。 Android平台手机图片浏览软件的开发实现(10):http://www.youerw.com/jisuanji/lunwen_2019.html