1:Bitmap是什么??
说起Bitmap就要搭配着图片这一概念来解释.Bitmap是图片在内存中的表示,图片是Bitmap磁盘持久化存储的文件.Bitmap实质是像素点矩阵组合.
Bitmap是Android系统中的图像处理的最重要类之一
用Bitmap可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
名词解释:
像素: 这个词,源于英文单词pixel,全称picture element,翻译过来即为图片元素
屏幕分辨率(dpi):分辨率是手机屏幕的像素点总数,一般用屏幕宽的像素点数乘以屏幕高的像素点数。分辨率越大屏幕越细腻,能够显示的细节就越多.
1080x720 分辨率的屏幕表示屏幕高有1080个像素 宽有720个像素
像素密度(dpi):每英寸屏幕像素的数量
安卓的计量单位dp,,主要是是用来标注控件的宽、高。其换算公式:
屏幕的总dp值 = 分辨率/屏幕密度
//获取屏幕密度
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 像素密度(每寸像素:120/160/240/320)
//获取屏幕实际分辨率
WindowManager windowManager = getWindow().getWindowManager();
Point point = new Point();
windowManager.getDefaultDisplay().getRealSize(point);
//屏幕实际宽度(像素个数)
int width = point.x;
//屏幕实际高度(像素个数)
int height = point.y;
2:一张位图所占用的内存大小?
图片长度(px)× 图片宽度(px)× 一个像素点占用的字节数
像素占用字节数和Bitmap内存中存储格式有关Bitmap.Config 枚举类 提供了常用的几个格式.
- ALPHA_8:表示 8 位 Alpha 位图,即 A=8,表示只存储 Alpha 位,不存储颜色值。一 个像素点占用 1 字节,很明显,它没有颜色,只有透明度。
- ARGB_4444:表示16位ARGB位图,即A、R、G、B各占4位,一个像素点占4+4+4+4=16 位,2 字节。
- ARGB_8888:表示32位ARGB位图,即A、R、G、B各占8位,一个像素点占8+8+8+8=32 位,4 字节。
- RGB_565:表示 16 位 RGB 位图,即 R 占 5 位,G 占 6 位,B 占 5 位,它没有透明度, 一个像素点占 5+6+5=16 位,2 字节。
位深
指的是在对Bitmap进行压缩存储时存储每个像素所用的bit数,主要用于存储
色深
色深指的是每一个像素点用多少bit来存储ARGB值,属于图片自身的一种属性。
总结:
有透明效果用 ARGB_8888 没透明效果用RGB_565 遮罩效果用ALPHA_8
3:图片和Bitmap?
Bitmap是是图片在内存中的表示,图片是Bitmap通过不同算法在磁盘中的持久化存储的文件,一般不同算法生成不同格式的文件,一般以算法名结尾,如PNG,JPEG,WEBP,BMP,GIF.
即,Bitmap是图片解压后在内存中的展示(数据大),图片是Bitmap,通过不同算法在磁盘中的持久化存储.
压缩:
因为Bitmap存在内存中数据较大,所以持久化存储的时候 考虑到节省空间所以需要对图片进行压缩存储,所以产生了满足不同场景需要的压缩算法.
4:图片压缩.
有损压缩和无损压缩
-
有损压缩
删除图片中的某些数据,依靠人脑去补充部分颜色.
优缺点:
降低了图像加载到内存的大小,但是会影响质量. -
无损压缩
相同颜色只存储一次,重复区域被压缩.
优缺点:
本地存储变小但是Bitmap展示到内存中不会被压缩
GIF : Gif是一种基于LZW算法的无损压缩格式,其压缩率一般在50%左右
BMP : BMP是标准图形格式,它是包括Windows在内多种操作系统图像展现的终极形式。
其本质就是Bitmap对象直接持久化保存的位图文件格式,由于没有进行压缩存储,因此体积非常大
PNG : PNG格式本身的设计目的是替代GIF格式,所以它与GIF 有更多相似的地方。PNG格式也属于无损压缩,其位深为32位,
也就是说它支持所有的颜色类型
JPEG : JPEG是一种有损压缩格式,JPEG图片以24位颜色压缩存储单个位图。也就是说,JPEG不支持透明通道。JPEG也不支持多帧动画。
因为是有损压缩,所以需要注意控制压缩率以免图片质量太差 .(不支持透明度)
WEBP : WebP支持有损和无损压缩、支持完整的透明通道、也支持多帧动画,并且没有版权问题,是一种非常理想的图片格式。
总结:
JPEG 有损压缩内存中小,牺牲了图片质量
PNG 无损压缩内存中不变
WEBP 压缩比较高,压缩时间长(存储时间长)
5:关键类和方法说明
- BitmapFactory: Bitmap的工厂类,通过BitmapFactory的静态方法来创建Bitmap对象
- BitmapFactory.Options : 代表对Bitmap对象的属性设置(配置)
BitmapFactory.Options bm=new BitmapFactory.Options();
BitmapFactory.Options 说明(重要)
1:inJustDecodeBounds 是否只扫描轮廓,默认为false 会创建Bitmap true时不创建Bitmap
BitmapFactory.Options对象的outWidth和outHeight属性分别代表Bitmap对象的宽和高, 但是这两个属性在Bitmap对象未创建之前显然默认为0,默认只有在Bitmap对象创建后才能被赋予正确的值。而当inJustDecodeBounds属性为true,虽然不会分配内存创建Bitmap对象,但是会扫描轮廓来给outWidth和outHeight属性赋值, 就相当于绕过了Bitmap对象创建的这一步提前获取到Bitmap对象的宽高值
2:inSample:这个表示Bitmap的采样率,默认为1 必须为2的幂,比如2、4、8...等整数值。2 表示w/2和h/2 大小变为原先的1/4
3:inPreferredConfig:该属性指定Bitmap的色深值,该属性类型为Bitmap.Config值 Bitmap.Config.ARGB_8888
4:isMutable:该属性表示通过decodeXXXX方法创建的Bitmap对象其代表的图片内容是否允许被外部修改,比如利用Canvas重新绘制其内容等。默认为false,即不允许被外部操作修改。
网友评论