• 计算机中的颜色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)

  • 相关阅读:
    UIPickerView
    visual studio2010生成get方法和set方法快捷键
    vmware安装mac虚拟机键盘失灵解决方法
    运行android模拟器过大
    [SQL Utility] How to retrieve Oracle’s version info?
    【读书笔记】c# in depth (1)
    [Oracle 10g] About Recycle bin
    [Oracle Troubleshooting] Get Oracle Bounces When Data File Is Missing
    [Oracle Mgmt]Clone Oracle Database Manually
    [SQL*PLUS]Set Up Sql*Plus
  • 原文地址:https://www.cnblogs.com/grenet/p/1629256.html
Copyright © 2020-2023  润新知