Android 图像混合技术

news2024/12/28 20:10:51

Android 图像混合技术

色彩知识

色彩

光学三原色

光学三原色由:红、绿、蓝组成。

色值分别是:

  • 红(red ):#FF0000 RGB(255,0,0)
  • 绿(green):#00FF00 RGB(0,255,0)
  • 蓝(blue):#0000FF RGB(0,0,255)

光学三原色又光透过三棱镜分解得出。RGB是上面三个颜色的混合。通常用于灯光色彩中。

光学三原色为相加混色(可以理解为光的叠加),混合后颜色的明度提高,三色混合即为白色。

显示器采用RGB模式,就是因为显示器是电子光束轰击荧光屏上的荧光材料发出亮光从而产生颜色,当没有光的时候为黑色,光线加到最大时为白色。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gEGtEoQ-1672235871843)(null)]

(https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0110%2Fbcb0236ep00qmpidg000qc000u000j9m.png&thumbnail=660x2147483647&quality=80&type=jpg)

颜料三原色

颜料三原色由:品红、黄、青组成。

色值分别是:

  • 品红(magenta):#FF00FF CMYK(42,64,0,0)
  • 黄(yellow):#F8F400 CMYK(0,11,92,0)
  • 青(cyan):#00FFFF00FFFF CMYK(38,0,16,0)

颜料三原色采用相减混色(可以理解为光的吸收),混合后颜色的明度和纯度都会下降,三个混合即为黑色。与光学三原色不同。人眼看到颜料和颜色,是因为其他颜色被吸收了,而反射出的颜色,就是我们看到的颜色。

CMYK就是 Cyan Magenta Yellow Black。上面三种颜色加一个黑。CMYK模式,绘画和印刷领域。

其中CMYK和RGB,都是对于颜色描述的一种方式,但是由于底层原理不同,所以是有了不同的模式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L9EyXmjF-1672235842627)(null)]

(https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0110%2Fbd255e12p00qmpidg000pc000u000j9m.png&thumbnail=660x2147483647&quality=80&type=jpg)

HSL/HSB

颜色的三个属性分别为:色相(Hue)、明度(Brightness)、饱和度(Saturation)。

既然我们已经有了RGB,为什么还要用到HSB呢?

RGB对于图像彩色生成而言是理想的,但对于颜色描述而言,则存在很多限制,不能很好地描述人类实际解释的颜色。例如,已知每种原色的百分比,我们不能给出一辆汽车的颜色。此外,一张彩色图像也不是由3幅原色图像合成的单幅图像。因为,RGB,三原色并不能描述所有色彩。

需要注意的是,HSL和HSB,虽然含义相同,但是,他们是有缺别的。

Brightness(明度)是被认为是”光的量“,可以是任何颜色。

Lightness(亮度)是作为”白的量“来理解的

色相

色相指的是这些不同波长的色的情况。波长最长的是红色,最短的是紫色。

色彩是由于物体上的物理性的光反射到人眼视神经上所产生的感觉。色的不同是由光的波长的长短差别所决定的。把红、橙、黄、绿、蓝、紫和处在它们各自之间的红橙、黄橙、黄绿、蓝绿、蓝紫、红紫这 6 种中间色——共计 12 种色作为色相环。在色相环上排列的色是纯度高的色,被称为纯色。

其实就可以理解为他,他是一个什么颜色。

明度

明度是表示色所具有的亮度和暗度。计算明度的基准是灰度测试卡。

对于黑白图像来说,调整的就是这个明度,也就是亮度。如果定义明度的范围是[0,1]的话,0就是黑,1就是白。

饱和度

饱和度是用数值表示色的鲜艳或鲜明的程度。

饱和度为 0 时,就是黑白灰。有彩色的各种色都具有彩度值,无彩色的色的彩度值为0,对于有彩色的色的彩度(纯度)的高低,区别方法是根据这种色中含灰色的程度来计算的。

色相就是说,这个是什么个颜色。比如红色

明度是说,这个色,有亮。亮的红色

饱和度就是说,这个色,有多色。比如很红的亮红色。

理解

现在祭出来,UI那边经常能看到的一个页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwnFX6Yn-1672235842618)(null)]

(https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0110%2Faf5fdc6cp00qmpidg002bc000u000j9m.png&thumbnail=660x2147483647&quality=80&type=jpg)

但是这张图片不能有效的让我们理解,HSL的色彩模型。下面一张图,我们来看一下,HSL是如何描述一个颜色的。

HSB

中心轴上所有的点,他的饱和度(Saturation)都是0,所以可以看到,中心轴上只有黑白灰,就是最基础的明度(Lightenss),也就是黑白电视。

而越远离中心轴,其饱和度,就越高,具体的计算是,与中心轴做垂线。

而中心平面,最外圈的环,其实就是色相环。

那么色相环是怎么来的呢?我们知道,计算机表示颜色,是使用的RGB。如果我们将其理解为三维坐标系的话,那么我们可以得到一个色彩空间,如下图左。

RGB色彩空间与色相

然后我们将三原色相互混合而成的边。拉伸成一个圆形,其周长所在的颜色,就形成了色相环,如上图右。而这个圆形,就是色相盘。同时,也是上面梭形的上表面。

如果我们用关键点来看上面的三维坐标。他应该是这样的。
RGB色彩空间

OK,我们在现在再来看一下色相盘。色相环上的六大主色,用作基本参照:360°/0°红、60°黄、120°绿、180°青、240°蓝、300°洋红,它们在色相环上按照60°圆心角的间隔排列。

色相盘结构

对于色相的调整

色相调整

上面的图像,一个是绿螃蟹,一个是红螃蟹。其实就是对于其色相的改变。改了其本来的颜色。也就是从绿的变成了红的。

如果是对于一张图片的调整,可以理解为,将这张图片所有的颜色,延上面梭形中心轴垂直方向,旋转X度。

对于饱和度的调整

对于饱和度的调整,效果在于逐渐"丧失色彩"也就是,没那么“红”,逐渐偏向于原本亮度的黑白灰。其数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从灰度到纯色的变化。
饱和度调整

Android 图像合成技术

传统的Xfermode

Xfermode就是我们经常用的一个Paint的一个属性。我们常用的,一般就是里面,根据透明度,进行的交并补,做去留。但是,如果我们细心去看,里面也有一部分融合相关的参数。

Xfermode

下面是最基础的用法。用Clear属性,来画出一个同心圆。

canvas.drawCircle(90, 90, 90, paint);
//设置运算方式
paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR));
//源
canvas.drawCircle(90, 90, 30, paint);

交并补部分,就不再叙述,很好理解。我们主要关注其他几个属性,也是图像融合的几个属性。

具体属性可以参照Google文档

ADD

将源像素添加到目标像素,并使结果饱和。其实就是两个颜色叠加。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jBZAtUGg-1672235844732)(null)]

(https://developer.android.com/static/reference/android/images/graphics/composite_ADD.png)

DARKEN

在小的基础上,加上他们两个的融合。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urQJ5cKC-1672235844683)(null)]

(https://developer.android.com/static/reference/android/images/graphics/composite_DARKEN.png)

LIGHTEN

在大的基础上,加上他们两个的融合。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVsKLunV-1672235844548)(null)]

(https://developer.android.com/static/reference/android/images/graphics/composite_LIGHTEN.png)

MULTIPLY

将源像素和目标像素相乘。这个也叫"正片叠底"。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AEOsP4TI-1672235844564)(null)]

(https://developer.android.com/static/reference/android/images/graphics/composite_MULTIPLY.png)

OVERLAY

根据目标颜色将源和目标相乘或显示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTA416KB-1672235844725)(null)]

(https://developer.android.com/static/reference/android/images/graphics/composite_OVERLAY.png)

SCREEN

添加源像素和目标像素,然后减去源像素乘以目标像素。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OP1dMrTH-1672235844691)(null)]

(https://developer.android.com/static/reference/android/images/graphics/composite_SCREEN.png)

关注点

我们需要关注的在于,Xfermode他对于图片的操作,都是基于颜色,也就是RGB。上面这些,具体的计算公式在文档里都是可以找到的。而在UI使用的很多软件中,许多效果都是基于HSL/HSB,比如,明度叠加。使用Xfermode就实现不了。

BlendMode

BlendMode也是Paint的属性。但是在Api 29开始,很多基于HSL/HSB的运算方法才被添加。但是,好消息是,我很很轻易的就可以写出以下代码。

       mLPaint = Paint()
       mLPaint.isAntiAlias = true
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
           mLPaint.blendMode = BlendMode.LUMINOSITY
       } else {
           mLPaint.xfermode = PorterDuffXfermode(PorterDuff.Mode.LIGHTEN)
       }

Api 29以下,使用颜色运算来找到一种近似的效果。而在Api 29以上就可以还原UI对图像的操作。

COLOR

将目标的色相和饱和度替换为源的色相和饱和度,亮度不变。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rEmOGANX-1672235844699)(null)]

(https://developer.android.com/static/reference/android/images/graphics/blendmode_COLOR.png)

HUE

将目标色相替换为源色相,保持饱和度和光度不变。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cbbLkiot-1672235844717)(null)]

(https://developer.android.com/static/reference/android/images/graphics/blendmode_HUE.png)

LUMINOSITY

将目标亮度替换为源亮度,保持色相和饱和度不变。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMk4hVar-1672235844557)(null)]

(https://developer.android.com/static/reference/android/images/graphics/blendmode_LUMINOSITY.png)

关注点

其实我们需要注意的是,BlendMode对于HSL/HSB的操作不止局限于我列出的这几个。还有很多。并且,BlendModeXfermode原有的计算模式做了继承并扩展。更多效果,同样可以查看Google文档。

总结

BlendModeXfermode原有的计算模式做了继承并扩展。在Api 29以上,我们应积极的使用BlendMode,而不是Xfermode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十九讲:神州路由器基础知识

路由器简介路由器(Router)是连接Internet中多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读”懂对方的数据,实现不同网络或网段的互联互通。此外,它会根据…

数据平台建设指南(上)

前言 年底了,整理了下过去做的一些项目,希望能够给大数据行业的同学提供些大数据平台建设的思路。内容大致分五部分:数据采集,数据存储、数据计算、基础平台以及数据治理篇。由于涉及到的内容较多,打算分成两篇文章&am…

PHY驱动注册部分

SOC可以对PHY 进行配置或者读取PHY 相关状态,这个就需要 PHY 内部寄存器去实现了。PHY 芯片寄存器地址空间为 5位(支持访问32个寄存器).IEEE 定义了0~15这 16个寄存器的功能。而 16~31这16 个寄存器由厂商自行实现。 就是说不管你用的哪个厂家的 PHY 芯…

SAP ABAP——SAP简介(三)【S/4 HANA开发环境】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

linux常用命令(三)-目录操作

目录创建 - mkdir 我们可以使用mkdir(make directory)来创建目录。 示例 目录删除 - rm 可以使用rm(remove)来删除一个目录 语法 rm [-irf] name ...i:删除前逐一询问确认r:将目录及以下之档案亦逐一删…

转转AB平台的设计与实现

导读 在数据驱动时代,不管是在产品功能迭代还是策略决策时都需要数据的支撑。那么,当我们准备上线一个新功能或者策略时,如何评估新老版本优劣,即数据的可量化就成了问题。这个时候就需要引入 A/B Test 了。 一、A/B Test 是什么…

Tomcat基本用法

Tomcat基本用法一、Tomcat 是什么二、下载安装三、目录结构四、启动服务器五、部署静态页面一、Tomcat 是什么 汤姆猫? 事实上,Java 世界中的 “汤姆猫” 完全不是一回事,但是同样大名鼎鼎 ~ Tomcat 是一个 HTTP 服务器。 前面我们已经学…

公司如何做好舆情监控,舆情监控解决方案有哪些?

随着互联网快速发展,企业网络舆情动态成为决策发展的重要依据,所以做好网络舆情监控至关重要,接下来TOOM舆情监测小编带您简单了解公司如何做好舆情监控,舆情监控解决方案有哪些? 一、公司如何做好舆情监控 舆情监控是指通过不…

Spring Boot 使用 SpringDoc 库的 Swagger3.0

Swagger 定义 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步…

房产管理系统平台安全性分析?

房产管理系统是数图互通公司自主研发的FMCenterV5.0平台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。 以下是…

FL Studio21电脑版免费音乐编曲宿主软件下载

编曲主要考验电脑的处理器(CPU)性能、声卡。所以配置电脑的时候有条件的伙伴可以着重考虑这两方面。现在市面上惠普、戴尔、华为、苹果等品牌的电脑,在四五千这个范围的商务本,就可以胜任编曲工作。但是在一些较为庞大的工程中可能…

SolarMesh(微服务监管平台)安装教程

SolarMesh简介 SolarMesh是基于服务网格构建的微服务监管平台。SolarMesh基于 Istio 及容器技术,提供微服务流量监控和管理,提供完善的非侵入式服务治理解决方案,在提供Istio流量管理等基础能力外,还提供多集群纳管、监控告警、W…

为什么全球科技巨头都在布局超高清?

我们能明显地感受到,进入21世纪以来,影像视频所占用人类生活的时间、空间已达到人类诞生以来的最大值。根据《2022全球互联网现象报告》,2021年流媒体视频占互联网带宽流量的53.7%,比2020年提升了4.8%。衣食住行,休闲娱…

十亿人都在用的健康码,运维体系是怎么设计的?

导读|随着疫情防控模式的迭代,健康码访问DAU逐渐趋于下跌,意味着健康码将逐步完成历史使命,见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体系多方面,总结回顾健康码业…

骨传导耳机到底怎么样,五款好用的骨传导耳机推荐

还有很多人不知道骨传导耳机使用感受到底如何,骨传导耳机是开放式的听音方式,在使用骨传导耳机时,会更加安全、耳机的声音相对于入耳式的声音会更加具有空间立体感,具体使用感感受到底如何,看下文大家就有一定的了解了…

服务器ssl证书升级

最近服务器扫描出ssl证书是使用弱哈希算法签名的SSL证书(CVE-2004-2761)【原理扫描】,要求联系证书颁发机构重新颁发证书。使用弱哈希算法签名SSL证书的端口有1433,3389。所有要对这俩端口配置一个新的证书。算法且满足sha256。 下面是我我服务器证书升…

国际原子时(TAI),GPS时间,协调世界时(UTC)以及rinex文件起止时间

最近学习使用PRIDE-PPPAR处理GNSS原始数据,判断rinex文件是不是单天的问题实在让人费解。必应搜索了一下,结合手头上的软件,问题大致弄清楚了。 比如现在有1个rinex文件:GPSR0190.19O,如果用PRIDE-PPPAR 的命令pdp3处…

零售行业R公司对接亚马逊Amazon Device EDI项目案例

为了满足平台货物的多样性,亚马逊Amazon邀请了来自全球各地的优秀供应商加入其供应链体系。要管理如此庞大的供应商群体,需要完成大量的数据处理工作,位列世界500强的Amazon是如何传输这些数据的呢? 答案是:通过EDI&a…

基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单

文章目录一、前文总结二、系列文章三、MISC框架驱动四、解析:完整源码4.1 helloworld_misc_amlogic_driver.c4.2 Makefile五、编译执行(1)编译及部署(2)运行六、应用层调用6.1 APP源码6.2 命令及运行效果七、源码下载八…

思考札记1

2022年12月26日 今天看了荣耀新出的80GT,主处理器是第一代骁龙8,以及一个辅助处理器,性能怎么样不知道,但是12256价格来到了 3299,主摄5400万像素,感觉偏贵,我是不会买的 可能这机子就是主打性能…