colorsys.py (3060B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\colorsys.py 2 __all__ = ['rgb_to_yiq', 3 'yiq_to_rgb', 4 'rgb_to_hls', 5 'hls_to_rgb', 6 'rgb_to_hsv', 7 'hsv_to_rgb', 8 'hex_to_rgb'] 9 ONE_THIRD = 1.0 / 3.0 10 ONE_SIXTH = 1.0 / 6.0 11 TWO_THIRD = 2.0 / 3.0 12 13 def rgb_to_yiq(r, g, b): 14 y = 0.3 * r + 0.59 * g + 0.11 * b 15 i = 0.6 * r - 0.28 * g - 0.32 * b 16 q = 0.21 * r - 0.52 * g + 0.31 * b 17 return (y, i, q) 18 19 20 def yiq_to_rgb(y, i, q): 21 r = y + 0.948262 * i + 0.624013 * q 22 g = y - 0.276066 * i - 0.63981 * q 23 b = y - 1.10545 * i + 1.72986 * q 24 if r < 0.0: 25 r = 0.0 26 if g < 0.0: 27 g = 0.0 28 if b < 0.0: 29 b = 0.0 30 if r > 1.0: 31 r = 1.0 32 if g > 1.0: 33 g = 1.0 34 if b > 1.0: 35 b = 1.0 36 return (r, g, b) 37 38 39 def rgb_to_hls(r, g, b): 40 maxc = max(r, g, b) 41 minc = min(r, g, b) 42 l = (minc + maxc) / 2.0 43 if minc == maxc: 44 return (0.0, l, 0.0) 45 if l <= 0.5: 46 s = (maxc - minc) / (maxc + minc) 47 else: 48 s = (maxc - minc) / (2.0 - maxc - minc) 49 rc = (maxc - r) / (maxc - minc) 50 gc = (maxc - g) / (maxc - minc) 51 bc = (maxc - b) / (maxc - minc) 52 if r == maxc: 53 h = bc - gc 54 elif g == maxc: 55 h = 2.0 + rc - bc 56 else: 57 h = 4.0 + gc - rc 58 h = h / 6.0 % 1.0 59 return (h, l, s) 60 61 62 def hls_to_rgb(h, l, s): 63 if s == 0.0: 64 return (l, l, l) 65 if l <= 0.5: 66 m2 = l * (1.0 + s) 67 else: 68 m2 = l + s - l * s 69 m1 = 2.0 * l - m2 70 return (_v(m1, m2, h + ONE_THIRD), _v(m1, m2, h), _v(m1, m2, h - ONE_THIRD)) 71 72 73 def _v(m1, m2, hue): 74 hue = hue % 1.0 75 if hue < ONE_SIXTH: 76 return m1 + (m2 - m1) * hue * 6.0 77 if hue < 0.5: 78 return m2 79 if hue < TWO_THIRD: 80 return m1 + (m2 - m1) * (TWO_THIRD - hue) * 6.0 81 return m1 82 83 84 def rgb_to_hsv(r, g, b): 85 maxc = max(r, g, b) 86 minc = min(r, g, b) 87 v = maxc 88 if minc == maxc: 89 return (0.0, 0.0, v) 90 s = (maxc - minc) / maxc 91 rc = (maxc - r) / (maxc - minc) 92 gc = (maxc - g) / (maxc - minc) 93 bc = (maxc - b) / (maxc - minc) 94 if r == maxc: 95 h = bc - gc 96 elif g == maxc: 97 h = 2.0 + rc - bc 98 else: 99 h = 4.0 + gc - rc 100 h = h / 6.0 % 1.0 101 return (h, s, v) 102 103 104 def hsv_to_rgb(h, s, v): 105 if s == 0.0: 106 return (v, v, v) 107 i = int(h * 6.0) 108 f = h * 6.0 - i 109 p = v * (1.0 - s) 110 q = v * (1.0 - s * f) 111 t = v * (1.0 - s * (1.0 - f)) 112 i = i % 6 113 if i == 0: 114 return (v, t, p) 115 if i == 1: 116 return (q, v, p) 117 if i == 2: 118 return (p, v, t) 119 if i == 3: 120 return (p, q, v) 121 if i == 4: 122 return (t, p, v) 123 if i == 5: 124 return (v, p, q) 125 126 127 def hex_to_rgb(colorstring): 128 colorstring = colorstring.strip() 129 if len(colorstring) != 6: 130 raise ValueError, 'input #%s is not in #RRGGBB format' % colorstring 131 r, g, b = colorstring[:2], colorstring[2:4], colorstring[4:] 132 r, g, b = [ int(n, 16) for n in (r, g, b) ] 133 return (r / 255.0, g / 255.0, b / 255.0)