WS2812 梳理和颜色表示方法的对比:RGB和HSV
WS2812
WS2812是一种可编程的LED灯,具有RGB显示效果,可显示的颜色数量为2^24。


常用颜色表示方法
表示方法:
- RGB 表示
- 加法混色原理:RGB 颜色模型基于加法混色原理,将红(Red)、绿(Green)、蓝(Blue)三种基本颜色按照不同的强度相加,来生成各种颜色。这三种颜色被称为三原色,它们相互独立,不能通过其他颜色混合得到。
- 数值表示:在计算机中,通常用 0 到 255 之间的整数来表示每个颜色通道的强度。例如,(0, 0, 0) 表示没有任何颜色,即黑色;(255, 255, 255) 表示红、绿、蓝三种颜色都达到最强强度,混合后为白色。(255, 0, 0) 表示只有红色通道有强度,显示为纯红色;(0, 255, 0) 为纯绿色;(0, 0, 255) 为纯蓝色。对于其他颜色,如黄色是红色和绿色的等量混合,可表示为 (255, 255, 0);紫色是红色和蓝色的混合,可能表示为 (255, 0, 255) 等。
- HSV 表示
- 基于感知属性:HSV 颜色模型从人类感知颜色的角度出发,用色调(Hue)、饱和度(Saturation)和明度(Value)三个属性来表示颜色。
- 具体含义及取值
- 色调(Hue):用角度来表示,范围通常是 0° 到 360°。不同的角度对应不同的基本颜色,例如 0°(或 360°)代表红色,60° 代表黄色,120° 代表绿色,180° 代表青色,240° 代表蓝色,300° 代表品红色等。
- 饱和度(Saturation):表示颜色的鲜艳程度,取值范围从 0% 到 100%。0% 表示颜色完全不饱和,即灰色;100% 表示颜色达到最鲜艳的状态。
- 明度(Value):也称为亮度,取值范围从 0% 到 100%。0% 表示完全黑暗,即黑色;100% 表示颜色最亮,对于非黑色的颜色,明度越高,颜色越接近白色。例如,纯红色 (0, 100%, 100%) 是鲜艳的红色,而 (0, 100%, 50%) 则是较暗的红色。
操作方法对比:
- RGB 操作方法
- 颜色创建与混合:创建颜色时,直接指定红、绿、蓝三个通道的值。混合颜色时,通过对两个或多个颜色的 RGB 值进行算术运算来实现。例如,要混合颜色 A (200, 50, 30) 和颜色 B (30, 120, 200),可以将对应通道的值相加后取平均,得到混合后的颜色 C ((200 + 30) / 2, (50 + 120) / 2, (30 + 200) / 2)=(115, 85, 115)。
- 颜色调整:调整颜色的某个属性时,需要分别对红、绿、蓝三个通道进行操作。比如要使一个颜色变亮,通常需要增加三个通道的值;若要改变颜色的色调,可能需要按照一定规则调整三个通道值的比例。但这种调整方式相对不直观,因为改变一个通道的值可能会同时影响颜色的多个视觉属性。
- 应用场景中的操作特点:在图像处理软件中,当需要精确控制每个像素的颜色时,RGB 模型非常方便。例如,在 Photoshop 中进行图像绘制、颜色填充等操作时,可以直接在 RGB 模式下输入具体的数值来设置颜色。在计算机图形学中,绘制三维图形时,也经常使用 RGB 值来指定每个顶点的颜色。
- HSV 操作方法
- 颜色创建与混合:创建颜色时,先确定色调,即选择想要的基本颜色种类,然后再调整饱和度和明度来细化颜色。在混合颜色时,一般先考虑色调的混合关系,再根据需要调整混合后颜色的饱和度和明度。例如,混合红色 (0, 100%, 100%) 和绿色 (120, 100%, 100%),可以先取它们色调的中间值 60° 得到黄色调,然后根据混合比例和想要的效果调整饱和度和明度。
- 颜色调整:调整颜色的某个属性非常直观。如果想要让颜色更鲜艳,直接增加饱和度;想要让颜色变亮或变暗,就调整明度;想要改变颜色的种类,只需要改变色调值。这种操作方式更符合人类对颜色的直观感受和调整习惯。
- 应用场景中的操作特点:在一些需要用户交互选择颜色的场景中,HSV 模型更受欢迎。比如在网页设计的颜色选择器中,用户可以通过拖动滑块或点击色轮等方式,轻松地调整色调、饱和度和明度来选择所需的颜色。在图像颜色调整工具中,如 Lightroom 的色彩调整功能,也常采用 HSV 模型,方便用户根据自己的视觉感受对图像的颜色进行调整
WS2812 的颜色表示方法主要基于 RGB 颜色模型,通过对红(Red)、绿(Green)、蓝(Blue)三种基色的不同强度组合来表示各种颜色,具体如下:
颜色数据结构
- WS2812 使用 24 位数据来表示颜色,按照 GRB 的顺序依次发送数据,每个颜色通道占用 8 位,即每个通道有 256 种不同的强度级别。这意味着可以组合出,即 16,777,216 种不同的颜色。
- 例如,要表示纯红色,数据可能为
0x00FF00,其中绿色通道为最大值 255(FF),红色和蓝色通道为 0;要表示白色,数据则为0xFFFFFF,即红、绿、蓝三个通道都为最大值 255。
颜色控制原理
- 在实际控制中,通过向 WS2812 发送特定的 24 位数据来控制其显示的颜色。微控制器或其他控制设备按照通信协议,将表示颜色的 GRB 数据依次发送到 WS2812 的 DIN 引脚。
- WS2812 接收到数据后,会解析其中的 GRB 值,并根据这些值来控制内部的红色、绿色和蓝色 LED 芯片的亮度,从而混合出相应的颜色。
与其他颜色模型的转换
- 与 HSV 颜色模型的转换:虽然 WS2812 本身基于 RGB 颜色模型工作,但在实际应用中,有时可能需要在 HSV 和 RGB 之间进行转换。从 HSV 转换为 RGB 时,需要根据 HSV 的色相(H)、饱和度(S)和明度(V)值,通过特定的算法计算出对应的 RGB 值,再发送给 WS2812。例如,对于一个色相为 60 度、饱和度为 100%、明度为 100% 的颜色,转换为 RGB 后可能是
0xFFFF00(黄色)。
相关文章:
WS2812 梳理和颜色表示方法的对比:RGB和HSV
WS2812 WS2812是一种可编程的LED灯,具有RGB显示效果,可显示的颜色数量为2^24。 常用颜色表示方法 表示方法: RGB 表示 加法混色原理:RGB 颜色模型基于加法混色原理,将红(Red)、绿(…...
JAVA实战开源项目:蜗牛兼职平台(Vue+SpringBoot) 附源码
本文项目编号 T 034 ,文末自助获取源码 \color{red}{T034,文末自助获取源码} T034,文末自助获取源码 目录 一、系统介绍1.1 平台架构1.2 管理后台1.3 用户网页端1.4 技术特点 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景…...
C++:多继承习题3
题目内容: 声明一个时间类Time,时间类中有3个私有数据成员(Hour,Minute,Second)和两个公有成员函数(SetTime和PrintTime)。要求: (1) SetTime根据传递的3个参数为对象设置时间; &a…...
【云安全】云原生-K8S-搭建/安装/部署
一、准备3台虚拟机 务必保证3台是同样的操作系统! 1、我这里原有1台centos7,为了节省资源和效率,打算通过“创建链接克隆”2台出来 2、克隆之前,先看一下是否存在k8s相关组件,或者docker相关组件 3、卸载原有的docker …...
06-AD向导自动创建P封装(以STM32-LQFP48格式为例)
自动向导创建封装 自动向导创建封装STM32-LQFP48Pin封装1.选则4排-LCC或者QUAD格式2.计算焊盘相定位长度3.设置默认引脚位置(芯片逆时针)4.特殊情况下:加额外的标记 其他问题测量距离:Ctrl M测量 && Ctrl C清除如何区分一脚和其他脚?芯片引脚是逆时针看的? 自动向导…...
linux监控脚本+自动触发邮件发送
linux脚本 需求: CPU 负载:使用 uptime 命令,我们可以清楚地了解系统的 CPU 负载情况。这个命令会显示系统在过去 1 分钟、5 分钟和 15 分钟的平均负载。高负载可能意味着系统正在处理大量的任务,可能会导致性能下降或服务响应延迟…...
【漫话机器学习系列】066.贪心算法(Greedy Algorithms)
贪心算法(Greedy Algorithms) 贪心算法是一种逐步构建解决方案的算法,每一步都选择当前状态下最优的局部选项(即“贪心选择”),以期望最终获得全局最优解。贪心算法常用于解决最优化问题。 核心思想 贪心选…...
代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数
把目标值当作背包容量,每个平方数当作物品,题目变更为装满指定容量的背包,最小用几个物品会不会出现拼凑不出来的情况?不会,因为有数字1,对任意正整数百分百能拼凑出来因此此题目与上一道题就变得一模一样了…...
ts 基础核心
吴悠讲编程 : 20分钟学会TypeScript 无废话速成TS https://www.bilibili.com/video/BV1gX4y177Kf...
在RHEL 8.10上安装开源工业物联网解决方案Thingsboard 3.9
在RHEL/CentOS/Rocky/AlmaLinux/Oracle Linux 8单节点上安装 备注: 适用于单节点 是否支持欧拉??? 前提条件 本指南描述了如何在RHEL/CentOS 7/8上安装ThingsBoard。硬件要求取决于所选的数据库和连接到系统的设备数量。要在单…...
linux通过deb包安装(命令模式)
通过下载deb包安装Chrome浏览器 - lyy19s Wikihttps://lyy1119.github.io/%E8%BD%AF%E4%BB%B6%E4%BD%BF%E7%94%A8/Linux/InstallChrome/...
「Unity3D」在Unity中使用C#控制显示Android的状态栏
Unity打包的Android默认都是全屏,如果想要在真机上显示状态栏,就需要额外设置,有两种方式: 第一种,使用Android的Java代码去控制,然后以插件的方式放到Unity中,被C#调用。第二种,使…...
LLM评估优化与新技术创新综述
标题:LLM评估优化与新技术创新综述 文章信息摘要: LLM评估与优化需要采用多维度方法,包括自动基准测试、人工评估和模型自评估。RAG技术通过结合外部知识库提升模型表现,量化技术则通过降低参数精度优化资源消耗。新兴技术如模型…...
【Git】使用笔记总结
目录 概述安装Git注册GitHub配置Git常用命令常见场景1. 修改文件2. 版本回退3. 分支管理 常见问题1. git add [中文文件夹] 无法显示中文问题2. git add [文件夹] 文件名中含有空格3. git add 触发 LF 回车换行警告4. git push 提示不存在 Origin 仓库5. Git与GitHub中默认分支…...
ZZNUOJ(C/C++)基础练习1000——1010(详解版)
目录 1000 : AB Problem C语言版 C版 1001 : 植树问题 C语言版 C版 1002 : 简单多项式求和 C语言版 C版 1003 : 两个整数的四则运算 C语言版 C版 1004 : 三位数的数位分离 C语言版 C版 补充代…...
搜狐Android开发(安卓)面试题及参考答案
ViewModel 的作用及原理是什么? ViewModel 是 Android 架构组件中的一部分,主要作用是在 MVVM 架构中充当数据与视图之间的桥梁。它负责为视图准备数据,并处理与数据相关的业务逻辑,让视图(Activity、Fragment 等)专注于展示数据和与用户交互。比如在一个新闻应用中,Vie…...
WPS数据分析000007
目录 一、分列 智能分列 出生日期 数值转换 公式不运算 二、数据对比 离职员工 新入职员工 都在职的员工 三、合并计算 四、拆分表格 合并表格 一、分列 智能分列 出生日期 数据求和 文本型数字左对齐;数值型数字右对齐 数值转换 方式一: 方…...
SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门
前言 在分布式系统中,雪崩效应(Avalanche Effect)是一种常见的故障现象,通常发生在系统中某个组件出现故障时,导致其他组件级联失败,最终引发整个系统的崩溃。为了有效应对雪崩效应,服务保护方…...
把markdown转换为pdf的方法
将 Markdown 文件转换为 PDF 有多种方法,以下是几种常见的方式: 1. 使用 VS Code 和 Markdown 插件 VS Code 是一款流行的代码编辑器,支持通过插件将 Markdown 转换为 PDF。 步骤: 安装 VS Code: 下载地址ÿ…...
Controller 层优化四步曲
Controller 层优化四步曲 前言 在开发过程中,Controller 层作为系统与外界交互的桥梁,承担着接收请求、解析参数、调用业务逻辑、处理异常等职责。 然而,随着业务复杂度的增加,Controller 层的代码往往会变得臃肿且难以维护。 …...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
