程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 計算機中的顏色VII—快速計算純色的偏轉

計算機中的顏色VII—快速計算純色的偏轉

編輯:VB綜合教程
 

在顏色的實際使用中,通過更改顏色的色相值改變圖片的顏色是常用的方法。

  通過更改純色的色相值稱為純色的偏轉,例如:純色(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)
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved