计算机中的颜色XIII——颜色转换的快速计算公式

简介:

本文的公式的基础都是在前文的基础上的。详情请参看前文:

  计算机中的颜色I——颜色概述

  计算机中的颜色II——VB2005中的Color结构

  计算机中的颜色III——HSV表示方法

  计算机中的颜色IV——纯色、色相色

  计算机中的颜色V——快速计算颜色的色相值

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

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

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

  计算机中的颜色IX——总述:RGB和HSV快速转换

  计算机中的颜色X——两颜色的偏转值

  计算机中的颜色XI——从色相值到纯色的快速计算(新的公式)

  计算机中的颜色XII——快速计算纯色的色相值(新的公式)

 

  本文在前文的基础上。把颜色转换的各个公式重新整理了一番。

  1、基本概念:

    计算机中的颜色一般采用两种表示方法:

      RGB法:用R、G、B三个分量来表示一种颜色。每个分量取值范围在[0,255]

      HSV法:用色相H、饱和S、亮度V来表示一种颜色。

          其中,H的取值范围是[0,360),S的取值范围是[0,1],V的取值范围是[0,1]

    纯色:颜色的S,V分量均是1,则该颜色表示纯色。纯色和色相有一一对应的关系。故有时用纯色表示色相

    灰度色:当S=0时,该颜色为灰度色。此时,三个颜色分量均相等。

  2、基本函数:

    MAX{A1,A2,A3,A4,……}:表示在A1,A2,A3,A4,……中取最大值

    MIN{A1,A2,A3,A4,……}:表示在A1,A2,A3,A4,……中取最小值

    |A|:表示取A的绝对值,若A≥0,则为A;若A<0,则为-A

    SIGN(A):表示取A的符号,若A>0,则为1;若A<0,则为-1;若A=0,则为0

    {A,P}:范围截取函数,若A<0,则为0;若A>P,则为P;若0≤A≤P,则为A

    A MOD B:求余运算,表示A除以B后的余数

  3、颜色的转换:RGB》HSV

    颜色Q的三个分量R、G、B

    令Max=MAX{R,G,B};Min=MIN{R,G,B}

 

    若Max=Min,则H=0,S=0,V=Max/255

 

    若Max≠Min,则

      H=180+(2Max-G-B+R-Min)×SIGN(B-G-0.5)/(Max-Min)×60

      S=1-Min/Max

      V=Max/255

 

  4、颜色的转换:HSV》RGB

    颜色Q的三个分量H、S、V

    令Max=255V

    

    若S=0,则表示灰度色;R=G=B=Max

 

    若S>0,则

      令P=255SV=Max-Min;Min=Max-255SV=255(1-S)V

      H'=H/60×P

      R={|H'-3P|-P,P}+255(1-S)V

      G={2P-|H'-2P|,P}+255(1-S)V

      B={2P-|H'-4P|,P}+255(1-S)V

 

  5、获得指定颜色的纯色

    颜色Q的三个分量R、G、B。该颜色对应的纯色Q'的三个分量R'、G'、B'。

    令Max=MAX{R,G,B};Min=MIN{R,G,B}

    

    若Max=Min,则R'=G'=B'=Max

    

    若Max≠Min,则

      R'=(R-Min)/(Max-Min)

      G'=(G-Min)/(Max-Min)

      B'=(B-Min)/(Max-Min)

 

  6、颜色的偏转

    颜色Q的三个分量R、G、B。该颜色偏转N后得到的颜色Q'的三个分量R'、G'、B'

    N>0表示顺时针方向偏转;N<0表示逆时针方向偏转    

 

    若R=G=B,则该颜色为灰度色。则R'=R,G'=G,B'=B

 

    若不为灰度色

    先按照3的方法求出Q的色相H

    颜色Q'的色相H'=(H+N) MOD 360

    再按照4的方法求出颜色Q'的三个颜色分量

 

  7、求出两个颜色的偏转值

    颜色Q1的三个分量R1、G1、B1;颜色Q2的三个分量R2、G2、B2。求从颜色Q1到颜色Q2的偏转值

    先按照3的方法求出Q1的色相H1,Q2的色相H2

    N=(H2-H1) MOD 360

    


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

相关文章
|
数据可视化
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
19798 2
labview数值型数据实验输入显示时间滑动杆旋钮仪表相加相减相乘滚动条
LabVIEW是一种程序开发环境,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。
152 0
|
Web App开发 API C语言
μcGUI学习笔记之三文本显示与数值显示
  μc/GUI学习笔记之三文本显示与数值显示 3.1      文本显示 3.1.1   显示支持控制字符 文本显示支持的ASCII字符如图3.1。
982 0
|
自然语言处理
Q&A | 热图的单元格颜色和数值标签可以不一一对应吗?
Q&A | 热图的单元格颜色和数值标签可以不一一对应吗?
171 0
Q&A | 热图的单元格颜色和数值标签可以不一一对应吗?
|
数据安全/隐私保护
绘制混合密度函数图以及添加分位数线
这里我主要使用 ggridges 包中的 stat_density_ridges()。这个包的介绍,小编以前做过一期内容,可见:ggridges包—峰峦图详细介绍。读者需要进一步阅读课件这篇博文[1],以及一些案例[2]。
84 0
绘制混合密度函数图以及添加分位数线
在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。
编写Java程序:在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。
|
C语言
C语言基础练习-输入球体半径,计算球体表面积和体积
这是我个人学习c语言的练习,如果对你有帮助,请关注我,我将不定期更新,如果疑问或者建议可以在评论区留言沟通。

热门文章

最新文章