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

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)