zoukankan      html  css  js  c++  java
  • 计算机中的颜色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)

  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/grenet/p/1629256.html
Copyright © 2011-2022 走看看