android bitmap相关内容小结和漫想

来源:互联网 发布:unity3d怎么制作人物 编辑:程序博客网 时间:2024/04/27 18:02

Bitmap内容小结和漫想

1.显示方向不对

有时候将jpg图片在内存解码后,进一步缩放旋转等处理,处理完成后,将bitmap编码成jpg文件写入sd卡,但是忘了写入或者矫正exif信息,下次decode显示这张图片,可能出现显示方向不对问题。原因在于没有获取exif方向参数,或者方向参数错误,不能自动矫正。有时间要看看BitmapFactory的nativeDecode系列方法解码流程.

2.decode小段字节数组抛OOM错误

取图形验证码时,有时候为了减少访问服务器次数,服务器直接将图片的二进制流简单编码后返回给客户端,如果字节数组不是有效的jpg流或者客户端没有解码成正确的原始jpeg流,调用decodeByteArray很有可能出现OOM错误。

提到OOM,不能不提BitmapFactory.Options和Bitmap.Config。
Options最常用的功能就是从jpg头提取图片尺寸,以及对原图子采样。
Bitmap.Config会涉及到像素格式和字节序等底层细节问题,android framework一般都处理好了,应用开发一般用的不多。

android 3.0之前bitmap是在本地堆中分配内存解码,在频繁解码的场景下,如果忘了及时调用recycle方法释放本地堆,仅仅靠finalize方法释放,很有可能出现问题。
android 3.0之后,bitmap是在java堆中存储,再没有这个问题。

bitmap 这个类本身非常简单,android3.0以后就是用byte[]存储像素信息,额外提供一些方法变换像素,用于显示,具体编码解码工作都扔给了本地方法, 如果Bitmap这个类不是final,在一些频繁编码解码场景可以考虑用libjpeg等库自行优化编码解码效率.

3 设置imageview的缩放方式(scaleType)

方式有很多,感觉记住常用的cropCenter, fitCenter, fitXY基本够用。

0 0
原创粉丝点击