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

  • 相关阅读:
    bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
    luoguP1886 滑动窗口 [单调队列]
    bzoj1047: [HAOI2007]理想的正方形
    bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
    树与二叉树之二--二叉树的性质与存储
    树与二叉树之一--基本概念与存储结构
    Markdown段首空格
    C++ atan2
    凸包学习笔记
    Codeforces Round #545 (Div. 1) E. Train Car Selection
  • 原文地址:https://www.cnblogs.com/grenet/p/1629256.html
Copyright © 2020-2023  润新知