android.graphics.BitmapRegionDecoder
2017-01-23 11:54
1311 查看
BitmapRegionDecoder能用来解码一张图片的某个矩形区域,这个类一般用在图片过大而你又只需要该图片的一部分的时候。为了生成BitmapRegionDecoder对象,可以调用newInstance(...),得到BitmapRegionDecoder后,使用者可以反复调用decodeRegion来获得该图片的不同区域的解码得到的bitmap.
publicBitmapdecodeRegion
解码该图片的一个矩形区域,该区域由rect决定,返回值为显示图像为该区域的bitmap,注意options中不能使用inPurgeable这个参数
public staticBitmapRegionDecodernewInstance
用于创建BitmapRegionDecoder,pathName表示路径,只有jpeg和png图片才支持这种方式,isShareable如果为true,那BitmapRegionDecoder会对输入流保持一个表面的引用,如果为false,那么它将会创建一个输入流的复制,并且一直使用它。即使为true,程序也有可能会创建一个输入流的深度复制。如果图片是逐步解码的,那么为true会降低图片的解码速度。如果路径下的图片不是支持的格式,那就会抛出异常
public staticBitmapRegionDecodernewInstance
同上,不过参数is变成了输入流
public staticBitmapRegionDecodernewInstance
同上,不过参数变成了文件描述符,在函数运行完之前,文件描述符不可以改变
public static
同上,不过参数变成了字节数组,offset为起始位置,length为长度
public voidrecycl
释放与BitmapRegionDecoder相关的内存,标记它已经死亡,调用它的任何非静态函数都会抛出异常,这个操作是不可逆的,所以当你决定调用时,请确认这个对象是不打算继续用了的,这个方法也是个超前的方法,其实根本用不着调用,当外面没有任何该对象的引用时,垃圾回收期自动会将它回收,后续看到的recycle就不说了,都是同一个意思
注意重写了该函数的对象比没重写该函数的对象更值得关注,在实例不可被获得后的很长一段时间,结束者都会继续运行,这依赖于内存的压力,所以依赖它们去清除资源是个不好的方法。结束者运行在一个单独的VM-wide线程中,所以在它里边运行会导致阻塞的工作是个不好的主意。一个结束者通常是有必要的,当一个类有它自身的资源并且需要调用它自身的函数来销毁时。尽管这样,这比明确的提供一个close方法并且坚持手工的去释放该实例要好的多。手工释放适合文件这些实例,但不适合哪些拥有很多临时引用的大型实例。不幸的是,代码在单独的结束者线程中会产生大量的临时引用。
如果你一定要用结束者,考虑要至少有你自己的引用队列和线程队列。不像创造函数那样,结束者需要你自己调用super.finalize(),不抛出异常的话结束者会被忽略并且不会结束结束者的线程。
BitmapFactory.Options api地址
转载出处
publicBitmapdecodeRegion
(Rect rect,BitmapFactory.Options
options)
解码该图片的一个矩形区域,该区域由rect决定,返回值为显示图像为该区域的bitmap,注意options中不能使用inPurgeable这个参数public intgetHeight()
public intgetWidth()
获取原图片的宽和高public final booleanisRecycled()
判断该对象是否被回收利用,如果是,那么调用它的方法会报错public staticBitmapRegionDecodernewInstance
(String pathName, boolean isShareable)
用于创建BitmapRegionDecoder,pathName表示路径,只有jpeg和png图片才支持这种方式,isShareable如果为true,那BitmapRegionDecoder会对输入流保持一个表面的引用,如果为false,那么它将会创建一个输入流的复制,并且一直使用它。即使为true,程序也有可能会创建一个输入流的深度复制。如果图片是逐步解码的,那么为true会降低图片的解码速度。如果路径下的图片不是支持的格式,那就会抛出异常public staticBitmapRegionDecodernewInstance
(InputStream is, boolean isShareable)
同上,不过参数is变成了输入流public staticBitmapRegionDecodernewInstance
(FileDescriptor fd, boolean isShareable)
同上,不过参数变成了文件描述符,在函数运行完之前,文件描述符不可以改变public static
BitmapRegionDecoder newInstance
(byte[] data, int offset, int length, boolean isShareable)
同上,不过参数变成了字节数组,offset为起始位置,length为长度public voidrecycl
4000
e()
释放与BitmapRegionDecoder相关的内存,标记它已经死亡,调用它的任何非静态函数都会抛出异常,这个操作是不可逆的,所以当你决定调用时,请确认这个对象是不打算继续用了的,这个方法也是个超前的方法,其实根本用不着调用,当外面没有任何该对象的引用时,垃圾回收期自动会将它回收,后续看到的recycle就不说了,都是同一个意思protected voidfinalize()
当垃圾回收器发现该实例不能再被获得的时候就会调用该函数,默认的代码里边该函数什么也不做,不过可以重写该函数来释放资源。注意重写了该函数的对象比没重写该函数的对象更值得关注,在实例不可被获得后的很长一段时间,结束者都会继续运行,这依赖于内存的压力,所以依赖它们去清除资源是个不好的方法。结束者运行在一个单独的VM-wide线程中,所以在它里边运行会导致阻塞的工作是个不好的主意。一个结束者通常是有必要的,当一个类有它自身的资源并且需要调用它自身的函数来销毁时。尽管这样,这比明确的提供一个close方法并且坚持手工的去释放该实例要好的多。手工释放适合文件这些实例,但不适合哪些拥有很多临时引用的大型实例。不幸的是,代码在单独的结束者线程中会产生大量的临时引用。
如果你一定要用结束者,考虑要至少有你自己的引用队列和线程队列。不像创造函数那样,结束者需要你自己调用super.finalize(),不抛出异常的话结束者会被忽略并且不会结束结束者的线程。
BitmapFactory.Options api地址
转载出处
相关文章推荐
- android.graphics.BitmapRegionDecoder
- android - BitmapRegionDecoder 翻译
- Android2.3使用BitmapRegionDecoder获取指定区域的图片
- Android使用BitmapRegionDecoder获取指定区域的图片
- android2.3.3新类--BitmapRegionDecoder
- Android BitmapRegionDecoder截取图片
- android2.3.3新类--BitmapRegionDecoder
- Android使用BitmapRegionDecoder加载超大图片方案
- Android使用BitmapRegionDecoder加载超大图片方案
- Android加载大图——BitmapRegionDecoder
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565
- Android ApiDemos示例解析(51):Graphics->AlphaBitmap
- 【Android Training - Graphics】高效地显示Bitmap图片(Lesson 4 - 优化Bitmap的内存使用)
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- android.graphics.Bitmap 一
- void android.graphics.Bitmap.recycle()
- 【Android】 Bitmap出现 decoder->decode returned false 错误
- android编程过程中遇到的关于Canvas: trying to use a recycled bitmap android.graphics.Bitmap问题的原因及解决办法
- android.graphics.Bitmap 二