Android Bitmap和Drawable的对比

发布时间 - 2026-01-11 01:34:45    点击率:

Android Bitmap和Drawable的对比

Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。

    Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。

A bitmap is a Drawable. A Drawable is not necessarily a bitmap. Like all thumbs are fingers but not all fingers are thumbs.
Bitmap是Drawable . Drawable不一定是Bitmap .就像拇指是指头,但不是所有的指头都是拇指一样.

The API dictates: API规定:

Though usually not visible to the application, Drawables may take a variety of forms: 尽管通常情况下对于应用是不可见的,Drawables 可以采取很多形式:

Bitmap: the simplest Drawable, a PNG or JPEG image. Bitmap: 简单化的Drawable, PNG 或JPEG图像. 
Nine Patch: an extension to the PNG format allows it to specify information about how to stretch it and place things inside of it.
Shape: contains simple drawing commands instead of a raw bitmap, allowing it to resize better in some cases.
Layers: a compound drawable, which draws multiple underlying drawables on top of each other.
States: a compound drawable that selects one of a set of drawables based on its state.
Levels: a compound drawable that selects one of a set of drawables based on its level.
Scale: a compound drawable with a single child drawable, whose overall size is modified based on the current level.

对比项 显示清晰度 支持透明色 支持色相色差调整 支持像素操作
Bitmap 相同
Drawable 相同

Drawable在内存占用和绘制速度这两个非常关键的点上胜过Bitmap

- Drawable和Bitmap之间可以互相转换,Drawable占用内存远小于Bitmap。

- setImageDrawable使用资源文件;setImageBitmap使用bitmap图片,该图片可能是读取本地相册,或者从资源文件转换而来。

- setImageResource()和setImageBitmap()

//setImageResource()
public void setImageResource (int resId)//占用UI thread;
// setImageBitmap()
ImageView iv;
String fileName = "/data/data/com.test/aa.png";
Bitmap bm = BitmapFactory.decodeFile(fileName); 
iv.setImageBitmap(bm); //占用内存
// setImageBitmap()
Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
imageView.setImageBitmap(image);
// Bitmap转换成Drawable
Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
BitmapDrawable bitmapDrawable = new BitmapDrawable(image);
imageView.setImageDrawable(bitmapDrawable);
// 结论:Bitmap是Drawable . Drawable不一定是Bitmap

小结

Bitmap: 简单化的Drawable, PNG 或JPEG图像. 

Drawable在内存占用和绘制速度这两个非常关键的点上胜过Bitmap

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# android  # Bitmap和Drawable的区别  # Bitmap和Drawable  # Android中一种巧妙的drawable.xml替代方案分享  # Android RippleDrawable 水波纹/涟漪效果的实现  # Android自定义Drawable之在Drawable中部指定透明区域方法示例  # 浅谈Android中Drawable使用知识总结  # Android开发基于Drawable实现圆角矩形的方法  # Android自定义Drawable实现圆角效果  # Android Drawable和Bitmap的转换实例详解  # Android DrawableTextView图片文字居中显示实例  # Android Drawable必备知识小结  # Android drawable微技巧  # 你不知道的drawable细节  # 这两个  # 点上  # 都是  # 也有  # 就像  # 而来  # 也很  # 希望能  # 比较好  # 它可以  # 谢谢大家  # 转换成  # 情况下  # 文件转换  # 效率高  # forms  # allowing  # resize  # simplest  # variety 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel Fortify是什么,和Jetstream有什么关系  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Swift中swift中的switch 语句  jQuery validate插件功能与用法详解  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何在局域网内绑定自建网站域名?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  中山网站推广排名,中山信息港登录入口?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  利用python获取某年中每个月的第一天和最后一天  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何在Windows环境下新建FTP站点并设置权限?  手机网站制作与建设方案,手机网站如何建设?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Python函数文档自动校验_规范解析【教程】  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  iOS发送验证码倒计时应用  如何实现javascript表单验证_正则表达式有哪些实用技巧  网站页面设计需要考虑到这些问题  MySQL查询结果复制到新表的方法(更新、插入)  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何自定义错误页面(404, 500)?(代码示例)  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  JS弹性运动实现方法分析  JS中对数组元素进行增删改移的方法总结  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  潮流网站制作头像软件下载,适合母子的网名有哪些?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel如何使用withoutEvents方法临时禁用模型事件  Windows Hello人脸识别突然无法使用  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Android使用GridView实现日历的简单功能  微信小程序 闭包写法详细介绍  如何在Windows服务器上快速搭建网站?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何用IIS7快速搭建并优化网站站点?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel怎么实现模型属性的自动加密