android.graphics.BitmapRegionDecoder

来源:互联网 发布:思科大数据平台 编辑:程序博客网 时间:2024/05/16 10:27

 BitmapRegionDecoder能用来解码一张图片的某个矩形区域,这个类一般用在图片过大而你又只需要该图片的一部分的时候。为了生成BitmapRegionDecoder对象,可以调用newInstance(...),得到BitmapRegionDecoder后,使用者可以反复调用decodeRegion来获得该图片的不同区域的解码得到的bitmap.

 

public Bitmap decodeRegion (Rect rect,BitmapFactory.Options options)

解码该图片的一个矩形区域,该区域由rect决定,返回值为显示图像为该区域的bitmap,注意options中不能使用inPurgeable这个参数

public int getHeight()

public int getWidth()

获取原图片的宽和高

public final boolean isRecycled()

判断该对象是否被回收利用,如果是,那么调用它的方法会报错

public static BitmapRegionDecoder newInstance (String pathName, boolean isShareable)

用于创建BitmapRegionDecoder,pathName表示路径,只有jpeg和png图片才支持这种方式,isShareable如果为true,那BitmapRegionDecoder会对输入流保持一个表面的引用,如果为false,那么它将会创建一个输入流的复制,并且一直使用它。即使为true,程序也有可能会创建一个输入流的深度复制。如果图片是逐步解码的,那么为true会降低图片的解码速度。如果路径下的图片不是支持的格式,那就会抛出异常

public static BitmapRegionDecoder newInstance (InputStream is, boolean isShareable)

同上,不过参数is变成了输入流

public static BitmapRegionDecoder newInstance (FileDescriptor fd, boolean isShareable)

同上,不过参数变成了文件描述符,在函数运行完之前,文件描述符不可以改变

public static BitmapRegionDecoder newInstance (byte[] data, int offset, int length, boolean isShareable)

同上,不过参数变成了字节数组,offset为起始位置,length为长度

public void recycle()

释放与BitmapRegionDecoder相关的内存,标记它已经死亡,调用它的任何非静态函数都会抛出异常,这个操作是不可逆的,所以当你决定调用时,请确认这个对象是不打算继续用了的,这个方法也是个超前的方法,其实根本用不着调用,当外面没有任何该对象的引用时,垃圾回收期自动会将它回收,后续看到的recycle就不说了,都是同一个意思

protected void finalize()

当垃圾回收器发现该实例不能再被获得的时候就会调用该函数,默认的代码里边该函数什么也不做,不过可以重写该函数来释放资源。

注意重写了该函数的对象比没重写该函数的对象更值得关注,在实例不可被获得后的很长一段时间,结束者都会继续运行,这依赖于内存的压力,所以依赖它们去清除资源是个不好的方法。结束者运行在一个单独的VM-wide线程中,所以在它里边运行会导致阻塞的工作是个不好的主意。一个结束者通常是有必要的,当一个类有它自身的资源并且需要调用它自身的函数来销毁时。尽管这样,这比明确的提供一个close方法并且坚持手工的去释放该实例要好的多。手工释放适合文件这些实例,但不适合哪些拥有很多临时引用的大型实例。不幸的是,代码在单独的结束者线程中会产生大量的临时引用。

如果你一定要用结束者,考虑要至少有你自己的引用队列和线程队列。不像创造函数那样,结束者需要你自己调用super.finalize(),不抛出异常的话结束者会被忽略并且不会结束结束者的线程。