详解Bitmap使用,以及BitmapDrawable和BitmapFactory

来源:互联网 发布:知乎提问怎么取消匿名 编辑:程序博客网 时间:2024/06/12 01:12

Android中Bitmap代表一张位图(位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩位图文件图像效果好,但是非压缩格式的,需要占用较大存储空间,不利于在网络上传送)

本文详细介绍了Bitmap相关问题。

1. Bitmap,Dawable,BitmapDrawable

Bitmap是Drawable的一种。通过BitmapDrawable联系,简单地理解为 Bitmap 储存的是像素信息,Drawable 储存的是 对 Canvas 的一系列操作。
而 BitmapDrawable 储存的是「把 Bitmap 渲染到 Canvas 上」这个操作。
Bitmap和Drawable相互转化:
BitmapDrawable里封装的图片就是一个Bitmap对象。可以调用BitmapDrawable的构造器将Bitmap对象包装成BitmapDrawable对象。

BitmapDrawable  drawable=new BitmapDrawable(bitmap);

获取一个BitmapDrawable所包装的Bitmap对象

Bitmap bitmap=drawable.getBitmap();

2,Bitmap常用方法: `

Bitmap bitmap = Bitmap.createBitmap(int width, int height, Config config)//创建指定格式、大小的位图 Bitmap bitmap = Bitmap.createBitmap(source,x,y,width, height, config);// 建立从源位图坐标(x,y)中取width*height一块区域  Bitmap bitmap = Bitmap.createScaledBitmap(Bitmap src,int dstWidth,int dstHeight, boolean filter)//以src为原图,创建新的图像,指定新图像的高(dstHeight)宽(dstWidth)以及是否可变。 

3,BitmapFactory

Bitmap实现在android.graphics包中。但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。这必然是某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就是BitmapFactory——用于从不同的数据源(file,streams, byte-arrays)中获取bitmap对象。

4,Bitmapfacory 常用方法 :

Bitmap bitmap = BitmapFactory.decodeResource(Resources res, int id)//从指定资源id中获取Bitmap bitmap = BitmapFactory.decodeFile(String pathName) //读取一个资源文件得到一个位图。如果位图数据不能被解码,或者opts参数只请求大小信息时,则返回NULL

5.Bitmap回收机制

使用isRecyled()方法判断是否回收,返回true时回收。使用recycle()方法,强制回收。

Bitmap bitmap=if(bitmap!=null&&!bitmap.getBitmap().isRecycled()){     bitmap.getBitmap().recycle();} //判断是否回收,若未回收强制回收
1 0
原创粉丝点击