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)