计算机中的颜色VII——快速计算纯色的偏转

简介:

 在颜色的实际使用中,通过更改颜色的色相值改变图片的颜色是常用的方法。

  通过更改纯色的色相值称为纯色的偏转,例如:纯色(255,0,0)顺时针偏转60就得到纯色(255,255,0),逆时针偏转60得到纯色(255,0,255)。

  那么纯色(255,44,0)顺时针偏转127得到什么颜色呢?下面的文章就是讲述计算方法。

  在“计算机中的颜色V——快速计算颜色的色相值”中,纯色的色相值H的计算公式为:

  当G≥B时,H=(255-R+G+B)/255×60       公示1

  当G<B时,H=360-(255-R+G+B)/255×60    公式2

  令ω为偏转值,且定义正值为顺时针偏转,负值为逆时针偏转,ω的取值范围为[-180,180]

  则偏转后的颜色的色相值H'=H+ω,此时H'有一个溢出的问题。后文再讨论。

  在“计算机中的颜色VI——从色相值到纯色的快速计算”中,

  计算纯色的关键就在于纯色和红色的夹角θ,当H<180,θ=H;当H>180,θ=360-H

  结合公式1和公式2,可知θ=(255-R+G+B)/255×60

  偏转后的纯色和红色的夹角θ’=θ+ω,此时的ω和上文的ω有一定的区别,在六色环的右边,定义和上文一样;在六色环的左边,定义和上文相反,逆时针正值,顺时针负值。因为六色环左右对称的缘故。

  λ’=θ’/60×255=(θ+ω)/60×255=[(255-R+G+B)/255×60+ω]/60×255=255-R+G+B+ω/60×255

  令ω’=ω/60×255,则λ’=255-R+G+B+ω’

  再考虑λ’的溢出问题,

  当λ’<0时,说明,偏转后的颜色跨越了左右分区(注:在上文中,实际颜色分为左右两个分区)。此时,令λ’’=-λ’

  当λ’>765时,也说明偏转后的颜色跨越了左右分区。此时,令λ’’=1530-λ’

  否则λ’’=λ’

  则偏转后的纯色(R’,G’,B’)

  R’=510-λ’’;若R’<0,则R’=0;若R’>255,则R’=255;

  G’=λ’’;若G’>255,则G’=255;

  B’=λ’’-510;若B’<0;则B’=0;

  若偏转后的颜色在左半区,那么交换G’,B’

  如何判断偏转后的颜色在左半区,而要交换G’,B’?

  对于G≥B,原色在右半区,那么当出现跨越分区的情况。偏转后的纯色在左半区。就是λ’<0或λ’>765

  对于G<B,原色在左半区,那么当没出现跨越分区的情况。偏转后的纯色在左半区。就是0≤λ’≤765

  这两种情况,有没有统一的表述公式呢?

  当(G<B)XOR(λ’<0或λ’>765)表达式为TRUE时,要交换G’,B’

  XOR表示异或运算,两个逻辑表达式为一真一假时,得到TRUE,反之得到FALSE

 

  好,把上面的推理过程梳理一下。纯色(R,G,B)偏转ω后,如何计算偏转纯色(R’,G’,B’)

  当G<B时,ω=-ω

  ω’=ω/60×255

  λ’=255-R+G+B+ω’

  当λ’<0时,令λ’’=-λ’

  当λ’>765时,令λ’’=1530-λ’

  否则λ’’=λ’

  偏转纯色的分量

  R’=510-λ’’;若R’<0,则R’=0;若R’>255,则R’=255;

  G’=λ’’;若G’>255,则G’=255;

  B’=λ’’-510;若B’<0;则B’=0;

  若(G<B)XOR(λ’<0或λ’>765)=True时,交换G’,B’分量的值

 

  (255,44,0)顺时针偏转127得到什么颜色呢?答案是(0,255,74)

  (255,44,0)逆时针偏转127得到什么颜色呢?答案是(14,0,255)


  本文转自万仓一黍博客园博客,原文链接:http://www.cnblogs.com/grenet/archive/2009/12/21/1629256.html,如需转载请自行联系原作者

相关文章
mAP@0.5与mAP@0.50.95的含义,YOLO
mAP@0.5与mAP@0.50.95的含义,YOLO
1590 0
|
10月前
|
Java
Java 异常处理:11 个异常处理最佳实践
本文深入探讨了Java异常处理的最佳实践,包括早抛出晚捕获、只捕获可处理异常、不忽略异常、抛出具体异常、正确包装异常、记录或抛出异常但不同时执行、不在finally中抛出异常、避免用异常控制流程、使用模板方法减少重复代码、抛出与方法相关的异常及异常处理后清理资源等内容,旨在提升代码质量和可维护性。
520 3
|
人工智能 自然语言处理 安全
Claude怎么使用?claude中文官网才是最佳选择!
Claude AI 是由 Anthropic 公司潜心研发的划时代 AI 助手,致力于打造更安全、更友好、更可靠的 AI 系统,引领智能交互进入全新时代。
|
安全 网络安全 数据安全/隐私保护
Wi-Fi 保护访问(WPA)详解
【4月更文挑战第22天】
756 0
Wi-Fi 保护访问(WPA)详解
|
10月前
|
机器学习/深度学习 数据采集 传感器
《C++解锁机器学习特征工程:构建智能数据基石》
在机器学习领域,特征工程是提升模型性能的关键。C++以其高性能和底层控制能力,在数据预处理、特征提取、选择与转换等方面展现出独特优势,尤其适用于大规模数据集和实时性要求高的场景。通过高效算法和数据结构,C++能快速处理数据,提取有价值特征,优化模型表现,广泛应用于金融、工业等领域。尽管存在开发难度,但C++在机器学习中的作用不可替代。
115 6
|
10月前
|
存储 监控 数据可视化
必看!J 人电商团队圣诞冲刺,哪 6 款办公软件是工作学习效率的神器?
随着圣诞节临近,电商零售行业迎来购物狂欢。高效的团队协作和个人学习效率是关键。本文推荐6款可视化团队协作软件:板栗看板、Asana、Miro、monday.com、Wrike和Notion。这些工具能直观呈现工作流程,促进沟通与协作,提升工作效率。板栗看板任务清晰,Asana规划细致,Miro创意无限,monday.com自动化高效,Wrike资源管理精准,Notion一体化便捷。选择合适的工具,助力团队在圣诞季取得佳绩。
150 1
|
11月前
|
JSON API 开发者
解密小红书详情API接口:获取与运用
小红书作为热门社交媒体平台,吸引了大量用户和创作者。企业或开发者可以通过调用小红书API接口,高效、合法地获取内容数据,提升业务效率。本文详细介绍如何获取和使用小红书笔记详情API接口,涵盖注册账号、创建应用、获取API密钥、查阅文档、构建请求、解析响应等步骤,以及应用场景和注意事项。
2909 2
|
机器学习/深度学习 人工智能 算法
AI Native应用中基于用户反馈的动态模型微调机制
【8月更文第1天】在AI Native应用程序中,用户体验和满意度是衡量产品成功的关键指标之一。为了提高这些指标,本文介绍了一种基于用户反馈的动态模型微调机制。这种方法允许模型在运行时根据用户的实际行为和偏好进行自我调整,从而不断优化其性能。
1576 5
|
运维 监控 Devops
怎样利用DevOps文化提高软件开发的效率和质量
DevOps文化的兴起为软件开发带来了新的思维和方法,通过自动化、持续交付、协作等实践,提高了软件开发的效率和质量。在不断变化的技术环境下,利用DevOps的理念和实践,软件开发团队能够更加灵活、高效地应对挑战,将创新快速落地。同时,随着新概念的涌现,我们也看到了DevSecOps和AIOps等的前景,为软件开发领域带来更多的可能性。
526 1
怎样利用DevOps文化提高软件开发的效率和质量
python-pymysql常用功能封装
python-pymysql常用功能封装
133 0