您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

你居然不懂Bitmap和Drawable?相关知识大扫盲

时间:2022-08-02 13:54:06  来源:掘金  作者:Android攻城狮狮狮

Bitmap是什么

Bitmap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

Bitmap 是位图信息的存储,即⼀个矩形图像每个像素的颜⾊信息的存储器。

Android从基础底层到架构成长的全套笔记,有需要完整版的朋友,可留言【Android】领取!

Drawable是什么

Drawable是一种可以在Canvas上进行绘制的抽象的概念,颜色、图片等都可以是一个Drawable。Drawable可以通过XML定义,或者通过代码创建。Android中Drawable是一个抽象类,每个具体的Drawable都是其子类。简单来讲,其可以理解为:图像。

Drawable 内部存储的是绘制规则,这个规则可以是⼀个具体的 Bitmap,也可以是⼀个纯粹的颜⾊,甚⾄可以是⼀个抽象的、灵活的描述。Drawable 可以不含有具体的像素信息,只要它含有的信息⾜以在 draw(Canvas) ⽅法被调⽤时进⾏绘制就够了。由于 Drawable 存储的只是绘制规则,因此在它的 draw() ⽅法被调⽤前,需要先调⽤ Drawable.setBounds() 来为它设置绘制边界。

Drawable的优点:

  • 使用简单,比自定义View成本低
  • 非图片类的drawable所占空间小,能减小apk大小

Bitmap和Drawable的相互转换

    //drawable convert bitmap    public static Bitmap drawableToBitmap(Drawable drawable) {        Bitmap bitmap = null;        if (drawable instanceof BitmapDrawable) {            BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;            if (bitmapDrawable.getBitmap() != null) {                return bitmapDrawable.getBitmap();            }        }        if ((drawable.getIntrinsicWidth() <= 0) || (drawable.getIntrinsicHeight() <= 0)) {            bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);        }        else {            bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);        }        Canvas canvas = new Canvas(bitmap);        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());        drawable.draw(canvas);        return bitmap;    }    //bitmap convert drawable    public static Drawable bitmapToDrawable(Context context, Bitmap bitmap) {        return new BitmapDrawable(context.getResources(), bitmap);    }

事实上,由于 Bitmap 和 Drawable 是两个不同的概念,因此确切地说它们并不是互相「转换」,⽽是从其中⼀个获得另⼀个的对象:

  • Bitmap -> Drawable:创建⼀个 BitmapDrawable。
  • Drawable -> Bitmap:如果是 BitmapDrawable,使⽤BitmapDrawable.getBitmap() 直接获取;如果不是,创建⼀个 Bitmap和⼀个 Canvas,使⽤ Drawable 通过 Canvas 把内容绘制到 Bitmap 中。

作者:Arrom
转载平台:掘金
链接:
https://juejin.cn/post/7126798240573292558



Tags:Bitmap   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
关于Android图像Bitmap类,你要知道的一切
Bitmap介绍Bitmap是一种图像文件格式,它由像素阵列组成,每个像素都有自己的颜色信息。在计算机图形学中,Bitmap图像可以被描述为一个二维的矩阵,其中每个元素代表一个像素的颜色...【详细内容】
2023-12-19  Search: Bitmap  点击:(102)  评论:(0)  加入收藏
Redis高级数据类型:BitMap
导语在Redis中,BitMap(位图)是一种非常强大的高级数据类型,用于存储和处理大量布尔值信息。通过使用BitMap,您可以在节省内存的同时高效地执行各种位操作,如位的设置、清除、翻转...【详细内容】
2023-08-18  Search: Bitmap  点击:(196)  评论:(0)  加入收藏
Bitmap、RoaringBitmap原理分析
作者:京东科技 曹留界在人群本地化实践中我们介绍了人群ID中所有的pin的偏移量可以通过Bitmap存储,而Bitmap所占用的空间大小只与偏移量的最大值有关系。假如现在要向Bitmap内...【详细内容】
2023-03-24  Search: Bitmap  点击:(138)  评论:(0)  加入收藏
Redis 巧用 Bitmap 实现亿级海量数据统计
引言在海量数据处理领域,统计数据的数量是一个常见的问题。比如统计每个 IP 地址出现的次数,统计每个用户的活跃时段等等。这些问题的数据规模都很大,可能会达到亿级别,对于传统...【详细内容】
2023-03-16  Search: Bitmap  点击:(245)  评论:(0)  加入收藏
你居然不懂Bitmap和Drawable?相关知识大扫盲
Bitmap是什么Bitmap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。Bitmap 是位图...【详细内容】
2022-08-02  Search: Bitmap  点击:(421)  评论:(0)  加入收藏
用什么算法可以快速检索数据?Bitmap了解一下
一个关于用户标签的需求为了帮助公司精准定位用户群体,咱们需要开发一个用户画像系统,实现用户信息的标签化。用户标签包括用户的社会属性、生活习惯、消费行为等信息,例如下面...【详细内容】
2021-08-30  Search: Bitmap  点击:(357)  评论:(0)  加入收藏
高效大数据开发之 bitmap 思想的应用
作者:xmxiong,PCG 运营开发工程师数据仓库的数据统计,可以归纳为三类:增量类、累计类、留存类。而累计类又分为历史至今的累计与最近一段时间内的累计(比如滚动月活跃天,滚动周活...【详细内容】
2020-09-15  Search: Bitmap  点击:(285)  评论:(0)  加入收藏
内存空间节约利器redis的bitmap(位图)应用场景有哪些你知道吗
在前面我们分享过一次Redis常用数据结构和使用场景,文章对Redis基本使用做了一个简单的API说明,但是对于其中String类型中的bitmap(位图)我们需要重点说明一下,因为他的作用真的...【详细内容】
2020-07-27  Search: Bitmap  点击:(1174)  评论:(0)  加入收藏
10亿数据如何快速找到某个数 | 经典算法BitMap详解
BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射,怎么理解呢?问题引入有一个无序有界int数组{1,2,5,7},初步估计占用内存44=16字节,因为只有4个数,很容...【详细内容】
2020-06-15  Search: Bitmap  点击:(336)  评论:(0)  加入收藏
阿里工程师:谈一谈Bitmap 的四种压缩方式
Android 中图片是以 bitmap 形式存在的,那么 bitmap 所占内存,直接影响到了应用所占内存大小,首先要知道 bitmap 所占内存大小计算方式:像素数 x 像素大小=图片长度(单位为像素)x...【详细内容】
2019-09-24  Search: Bitmap  点击:(862)  评论:(0)  加入收藏
▌简易百科推荐
Android Emulator黑屏怎么办 Android模拟器黑屏解决方法
Android Emulator黑屏问题困扰了非常多的玩家,Android Emulator作为一款安卓模拟器,可以让你在电脑上运行和浏览安卓应用程序,但是程序本身不是很稳定,很容易会出现黑屏,启动不了...【详细内容】
2024-03-04  18183游戏网    Tags:Android Emulator   点击:(46)  评论:(0)  加入收藏
Android开发中常见的Hook技术有哪些?
Hook技术介绍Hook技术是一种在软件开发中常见的技术,它允许开发者在特定的事件发生时插入自定义的代码逻辑。常见的应用场景包括在函数调用前后执行特定的操作,或者在特定的事...【详细内容】
2023-12-25  沐雨花飞蝶  微信公众号  Tags:Android   点击:(92)  评论:(0)  加入收藏
在Android应用开发中使用NFC功能
NFC介绍NFC是指“近场通讯”(Near Field Communication),它是一种短距离无线通信技术,允许设备在非接触或极短距离内进行通信。NFC通常用于移动支付、门禁系统、智能标签和其他...【详细内容】
2023-12-22  沐雨花飞蝶  微信公众号  Tags:Android   点击:(104)  评论:(0)  加入收藏
关于Android图像Bitmap类,你要知道的一切
Bitmap介绍Bitmap是一种图像文件格式,它由像素阵列组成,每个像素都有自己的颜色信息。在计算机图形学中,Bitmap图像可以被描述为一个二维的矩阵,其中每个元素代表一个像素的颜色...【详细内容】
2023-12-19  沐雨花飞蝶  微信公众号  Tags:Android   点击:(102)  评论:(0)  加入收藏
Android开发中如何进行单元测试?
单元测试介绍单元测试是软件开发中的一种测试方法,用于验证代码中的最小可测试单元(通常是函数或方法)是否按预期工作。单元测试通常由开发人员编写,旨在隔离和测试代码的特定部...【详细内容】
2023-12-11  沐雨花飞蝶  微信公众号  Tags:Android   点击:(170)  评论:(0)  加入收藏
一篇聊聊Jetpack Room实现数据存储持久性
Room介绍Room 是 Android Jetpack 组件库中的一部分,它是用于在 Android 应用中进行本地数据库访问和管理的库。Room 提供了一个抽象层,使开发者能够更轻松地访问 SQLite 数据...【详细内容】
2023-12-08  沐雨花飞蝶  微信公众号  Tags:Jetpack   点击:(149)  评论:(0)  加入收藏
了解Android系统架构中的HAL硬件抽象层
在Android系统中,HAL的存在使得不同厂商的硬件可以统一被上层的应用程序调用,从而提高了系统的兼容性和可移植性。HAL还可以帮助开发者更方便地开发应用程序,因为他们不需要为...【详细内容】
2023-12-06  沐雨花飞蝶  微信公众号  Tags:Android   点击:(214)  评论:(0)  加入收藏
我们一起聊聊 IntentService 与 Service 的区别?
Service介绍Service组件是Android应用开发中的四大组件之一,用于在后台执行长时间运行的操作或处理远程请求。它可以在没有用户界面的情况下执行任务,并且可以与其他应用组件...【详细内容】
2023-12-06  沐雨花飞蝶  微信公众号  Tags:IntentService   点击:(179)  评论:(0)  加入收藏
Android数据对象序列化原理与应用
序列化与反序列化「序列化」是将对象转换为可以存储或传输的格式的过程。在计算机科学中,对象通常是指内存中的数据结构,如数组、列表、字典等。通过序列化,可以将这些对象转换...【详细内容】
2023-11-14  沐雨花飞蝶  微信公众号  Tags:Android   点击:(280)  评论:(0)  加入收藏
你了解Android中的SELinux吗?
SELinux介绍SELinux(Security-Enhanced Linux)是一种安全增强的Linux操作系统,它通过强制访问控制(MAC)机制来提供更高级别的系统安全保护。相比于传统的Linux访问控制机制(DAC),SEL...【详细内容】
2023-11-09  沐雨花飞蝶  微信公众号  Tags:Android   点击:(272)  评论:(0)  加入收藏
站内最新
站内热门
站内头条