Android Bitmap操作详解:转换与保存
需积分: 9 139 浏览量
更新于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-02-25 上传
2011-05-16 上传
2013-05-04 上传
2023-05-24 上传
wangmin_love_love
- 粉丝: 0
- 资源: 1
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程