Bitmap和Drawable的区别

news/2024/11/8 0:07:09/

日记

其实感觉最近事情挺多的,所有最近很多博客都是中午或者晚上休息的时候写的,甚至是项目编译的时候编写的。说真的,我最近感觉,对于那种大量的时间,我反而不能很好的运用,反而对于碎片时间,我能够恰到好处的运用到位。

还是聊聊我的日常吧,我还是很喜欢追番的,我常常和别人说我追番的时候,别人总会摇摇头,然后说,追番实在太累。特别是遇到剧本写的非常好的动漫,它总是能在恰到好处的地方给你留下悬念,从而引诱你非常期待下一集,没错,说的就是你《我推的孩子》。

我重复强调了非常多次,我只是一个兴趣使然的博主,但是总是有吃了空的人说我废话太多,一笑了之~我所有博客都是对各种学习视频和书籍的小结。

正文

这次来聊聊Bitmap和Drawable到底有什么区别。首先我认为我们应该知道这两个到底分别是什么?其实计算机领域的很多东西都是可以直接顾名思义的,所以很多时候命名其实也是一种学问,多看看大佬的命名习惯,都能学到很多。不是有句话叫做:蠢材擅长把简单的东西变得复杂,天才擅长把复杂的东西变得简单,大道至简就是这个道理。命名的时候不过脑子,往往就会有非常多的后遗症,就比如说拼写错误,后面人如果要重新改方法名的话代码评审的时候就需要花费额外的功夫去评审更多的文件,还有方法反射的风险。

Bitmap翻译过来就是位图,就是一个一个像素所组成的图片信息。而Drawable翻译过来就是“可绘制的”,即Drawable定义的是视图的绘制过程(和View有点像)。

所以其实Drawable和Bitmap并没有实际上的必要联系,只是我们平时使用Drawable的时候,用它来进行图片绘制的场景比较多,所以这就导致了这两者就像“真假美猴王”一样,渐渐地难以被区分罢了。

我们完全可以来看看Android源码中对这两个类的定义:

Bitmap:

public final class Bitmap implements Parcelable

我们可以看到对于Bitmap类,官方是不支持继承的,也就是不支持自定义Bitmap的,因为Bitmap更多的像是Kotlin的Data类,里面仅仅存储了图片的相关信息。

Drawable:

public abstract class Drawable

至于Drawable,我们可以看到官方将其设置为抽象类,而且,官方就已经提供了非常多的实现。在这里插入图片描述

最最常见的可能就是BitmapDrawable,我们所谓的Bitmap和Drawable互转其实就是Bitmap和BitmapDrawable之间的互转。Drawable读取Bitmap的相关信息,然后根据配置的参数,将其绘制到我们的目标视图上。

我们来看看如何自定义一个drawable:

new Drawable(){private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);@Overridepublic void draw(@NonNull Canvas canvas) {//Todo:draw something...基于实际需求,根据Paint和设置的属性来进行绘制}@Overridepublic void setAlpha(int i) {paint.setAlpha(i);//设置绘制视图的透明度}@Overridepublic void setColorFilter(@Nullable ColorFilter colorFilter) {paint.setColorFilter(colorFilter);}@Overridepublic int getOpacity() {//简单的Demo,复杂视图该参数并不能简单如此设置if(getAlpha() == 0) return PixelFormat.TRANSPARENT;if(getAlpha() == 1) return PixelFormat.OPAQUE;else return  PixelFormat.TRANSLUCENT;}};

说了这么多,那么自定义Drawable到底有什么用呢?其实还是那个老生常谈的问题,复用和性能。

我们前面已经说到了,Drawable的作用是封装绘制的过程。我们就可以将视图中的重复的绘制逻辑封装到Drawable中,然后我们就能减少重复代码和视图绘制的层级。

awable的作用是封装绘制的过程。我们就可以将视图中的重复的绘制逻辑封装到Drawable中,然后我们就能减少重复代码和视图绘制的层级。


http://www.ppmy.cn/news/349563.html

相关文章

景深与焦深

1焦深: 焦深是lens与sensor之间的距离不能超出的一个距离范围,即镜头到胶片的容差。 焦深的计算公式D 2Ncv/f. N为镜头光圈值,c为弥散圆,v为像距,f为镜头焦距。 2景深:

镜头景深计算公式的推导

景深是指成像画面中最近清晰点到最远的清晰点之间的范围。由于传感器或胶片的分辨率限制,或者照片冲洗放大后在一定距离观看时,受到人眼的分辨率极限限制,通常会将清晰这一概念与底片上一定尺寸的弥散斑大小相关联。 按照传统的景深定义&…

景深概念、计算方法与影响因素

一、景深概念 “景深(Depth of Field,DOF),是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。而光圈、镜头、及拍摄物的距离是影响景深的重要因素。” “在聚焦完成后,焦点前后的…

光学成像原理之景深(Depth of Field)

1. 概述 先看两个例子,拍摄花、昆虫等照片时,背景拍的比较模糊,突出被拍物。但当拍摄纪念照、风景等照片时,却会把背景拍摄得和被拍对象一样清晰。这两者就是不同景深。前者为浅景深,拍摄聚焦到被拍物上,只…

双camera景深计算

https://sanwen8.cn/p/2e41VC5.html 本文系微信公众号《大话成像》,知乎专栏《 all in camera》原创文章,转载请注明出处。 接着上一篇的说,其实在双摄像头的景深计算过程中如果只是按照上一篇文章介绍最简单的处理办法是一定得不到一个理想的…

景深与图像清晰的关系

照相机的镜头相当于一个凸透镜,它可以将物体的像投射到相机的感光元件上,从而拍到了物体。 了解了背景虚化的原理之后,就可以用软件算法在手机上模拟单反的大光圈效果了。 下面介绍一下几个与成像和景深有关的几个概念。 一、 焦点 某个发…

机器视觉问题:工业普通定焦镜头如何计算景深?景深计算

影响景深的主要因素: 1. 镜头光圈 光圈越大,景深越小。 光圈越小,景深越大。 以大恒镜头HN-1226-20M-C1/1X为例: 型号这里的12代表12mm焦距,26代表最大光圈是2.6。 从产品资料表格里面可以看到光圈范围2.6-16&am…

光圈、焦距、物距与景深的关系

在进行拍摄时,调节相机镜头,使距离相机一定距离的景物清晰成像的过程,叫做对焦,那个景物所在的点,称为对焦点,因为“清晰”并不是一种绝对的概念,所以,对焦点前(靠近相机…