一.bitmap的是由bitmapfactory得来的,所以先介绍bitmapfactory

1.1

   Bitmap实现在android.graphics包中。但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就是BitmapFactory。

该类为一个工其类,用于从不同的数据源来解析、创建Bitmap对象,BitmapFactory类提供的创建Bitmap对象的常用方法如下:

1.decodeFile(String pathName);用于从给定的路径所指定的文件中解析、创建Bitmap对象

2.decodeFileDescriptor(FileDescriptor fd);用于从FileDescriptor对应的文件中解析、创建bitmap对象

3.decodeResource(Resource res, int id);用于根据给定的资源id,从指定资源中解析、创建bitmap对象

4.decodeStream(InputStream in);用于从指定的输入流中解析、创建别bitmap对象

eg:解析sdcard中的一张图片文件

String path =" /sdcard/pictures/cd/img01.jpg";

Bitmap bm = BitmapFactory.decodeFile(path);

eg:解析drawable中的一张图片文件

Bitmap bm = BitmapFactory.decodeResource(ManiActivity.this.getResource, R.drawable.img01.png);

1.2 decode时的选项

    在使用方法decodeFile()/decodeResource()时,都可以指定一个BitmapFacotry.Options

利用Options的下列属性,可以指定decode的选项:

  • inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。
  • inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,亦即decodeXyz()返回值为null,但是Options的outAbc中解出了图像的基本信息。
  • inSampleSize 设置decode时的缩放比例。  利用Options的这些值就可以高效的得到一幅缩略图。

二.利用Bitmap和Matrix实现图像变换

  Bitmap可以和Matrix结合实现图像的剪切、旋转、缩放等操作。用源Bitmap通过变换生成新的Bitmap的方法:

方法一

public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, intheight, Matrix m, booleanfilter) 

方法二

public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, intheight)

方法三

public static Bitmap createScaledBitmap(Bitmap src, intdstWidth, int dstHeight,boolean filter)

第一个方法是最终的实现,后两种只是对第一种方法的封装。

第二个方法可以从源Bitmap中指定区域(x,y, width, height)中挖出一块来实现剪切

第三个方法可以把源Bitmap缩放为dstWidth x dstHeight的Bitmap。

设置Matrix的Rotate(通过setRotate())或者Scale(通过setScale()),传入第一个方法,可实现旋转或缩放。

三、保存图像文件

经过图像变换之后的Bitmap里的数据可以保存到图像压缩文件里(JPG/PNG)。

这个操作过程中,Bitmap.compress()方法的参数format可设置JPEG或PNG格式;quality可选择压缩质量;fOut是输出流(OutputStream),这里的FileOutputStream是OutputStream的一个子类。 

总结一下,本文介绍Bitmap的使用方法——用Bitmap实现图像文件的读取和写入,并用Bitmap实现图像的剪切、旋转和缩放变换。