Android Bitmap操作详解:转换与保存
需积分: 9 97 浏览量
更新于2024-09-14
收藏 7KB TXT 举报
"Android Bitmap 使用详解"
在Android开发中,Bitmap是用于处理图像的基本类,它提供了对像素级别的访问和操作。以下是对标题和描述中提到的Android Bitmap知识点的详细解释:
1. **从Drawable转换为Bitmap**
`drawableToBitmap`方法展示了如何将一个Drawable对象转换为Bitmap。这个方法首先根据Drawable的大小创建一个Bitmap对象,然后通过Canvas来绘制Drawable到Bitmap上。这里的`getIntrinsicWidth()`和`getIntrinsicHeight()`分别获取Drawable的固有宽度和高度,`getOpacity()`判断是否透明,从而决定使用哪种Bitmap配置(ARGB_8888或RGB_565)。
2. **从资源加载Bitmap**
Android中,通常使用`BitmapFactory.decodeResource()`方法从资源文件加载Bitmap。这里`Resources res`是应用的资源对象,`R.drawable.pic`是图片资源的ID。这个方法会根据图片的大小自动调整内存占用,但可能导致OOM(Out Of Memory)错误,因此在处理大图时需注意内存管理。
3. **Bitmap转为字节数组**
`Bitmap2Bytes`函数演示了如何将Bitmap对象压缩成字节数组。使用`compress(Bitmap.CompressFormat.PNG, 100, baos)`方法,其中`PNG`是压缩格式,100表示质量,越接近100质量越高,`baos`是用于存储压缩后数据的字节数组输出流。
4. **字节数组转为Bitmap**
`BitmapBytes2Bimap`方法接收一个字节数组并尝试将其解码为Bitmap。如果字节数组长度为0,函数返回null,否则使用`BitmapFactory.decodeByteArray()`解码字节数组。
5. **保存Bitmap到文件**
`saveBitmap2file`方法将Bitmap保存到本地文件。首先确定压缩格式(如JPEG),设置质量,然后创建一个OutputStream。这里使用`FileOutputStream`,并通过`compress()`方法将Bitmap写入文件。需要注意的是,保存前应确保文件路径的合法性,并处理可能的异常。
6. **Bitmap内存管理**
由于Bitmap占用了大量内存,Android提供了几种内存优化策略:
- 使用`inSampleSize`参数预加载缩略图,减少内存占用。
- 使用`Bitmap.Config`设置位图格式,如ARGB_8888 (32位)、RGB_565 (16位)等,减少每个像素的颜色信息。
- 使用`recycle()`方法回收不再使用的Bitmap,但要注意不能在使用中的Bitmap上调用此方法。
- 使用`LruCache`或` Fresco`, `Glide`, `Picasso`等库进行内存缓存管理。
7. **内存与磁盘缓存**
在处理大量Bitmap时,推荐使用磁盘缓存来降低内存压力。Android提供`DiskLruCache`类实现磁盘缓存,也可以使用现代图片加载库提供的解决方案。
Android Bitmap的使用涉及到资源加载、格式转换、内存管理和持久化存储等多个方面,合理使用可以提升应用性能,避免内存溢出问题。
2018-08-01 上传
2010-12-23 上传
2012-11-29 上传
2012-03-01 上传
2013-05-04 上传
2013-02-25 上传
2011-05-16 上传
2013-05-04 上传
wangmin_love_love
- 粉丝: 0
- 资源: 1
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫