NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

conversion.py (1580B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\chroma\conversion.py
      2 from __future__ import division
      3 import mathext
      4 
      5 def rgb_to_hsb(r, g, b):
      6     r = mathext.clamp(r, 0.0, 1.0)
      7     g = mathext.clamp(g, 0.0, 1.0)
      8     b = mathext.clamp(b, 0.0, 1.0)
      9     value_min = min(r, g, b)
     10     value_max = max(r, g, b)
     11     value_diff = value_max - value_min
     12     brightness = value_max
     13     if mathext.is_almost_zero(value_diff):
     14         return (0.0, 0.0, brightness)
     15     saturation = value_diff / value_max
     16     dr = ((brightness - r) / 6 + value_diff / 2) / value_diff
     17     dg = ((brightness - g) / 6 + value_diff / 2) / value_diff
     18     db = ((brightness - b) / 6 + value_diff / 2) / value_diff
     19     if r == brightness:
     20         hue = db - dg
     21     elif g == brightness:
     22         hue = 0.3333333333333333 + dr - db
     23     else:
     24         hue = 0.6666666666666666 + dg - dr
     25     if hue < 0:
     26         hue += 1
     27     if hue > 1:
     28         hue -= 1
     29     return (hue, saturation, brightness)
     30 
     31 
     32 def hsb_to_rgb(h, s, b):
     33     h = mathext.clamp(h, 0.0, 1.0)
     34     s = mathext.clamp(s, 0.0, 1.0)
     35     b = mathext.clamp(b, 0.0, 1.0)
     36     if mathext.is_almost_zero(s):
     37         return (b, b, b)
     38     h *= 6
     39     if mathext.is_close(h, 6):
     40         h = 0.0
     41     i = int(h)
     42     x = b * (1 - s)
     43     y = b * (1 - s * (h - i))
     44     z = b * (1 - s * (1 - (h - i)))
     45     if i == 0:
     46         return (b, z, x)
     47     if i == 1:
     48         return (y, b, x)
     49     if i == 2:
     50         return (x, b, z)
     51     if i == 3:
     52         return (x, y, b)
     53     if i == 4:
     54         return (z, x, b)
     55     if i == 5:
     56         return (b, x, y)