summaryrefslogtreecommitdiff
path: root/gestion_couleurs.py
blob: 3230f3da3f5ba7301d731891988f777732128598 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python3
# -*- coding: utf-8 -*-


### Gérer les couleurs

from gestion_erreurs import warning

def rgb_vers_tuple(chaine,defaut,liste_err):
    """ convertit une chaine rgb genre #00FF1B
    vers un tuple python (entre 0 et 1)
    En cas d'erreur, on met un warning et on renvoie
    le defaut"""
    chaine2 = chaine.lstrip("#")
    try:
        r = int(chaine2[0:2],16)/255
        v = int(chaine2[2:4],16)/255
        b = int(chaine2[4:6],16)/255                  
    except:
        warning("Impossible de convertir la couleur "+chaine,liste_err)
        return defaut
    return (r,v,b)

def tuple_vers_rgb( t):
    """ conversion inverse : renvoie une chaine
    de type #FF0045"""
    (r,v,b) = t
    if (r>1):
        r=1
    elif r<0:
        r=0
    if (v>1):
        v=1
    elif v<0:
        v=0
    if (b>1):
        b=1
    elif b<0:
        b=0        
        
    r = int(r*255)
    v = int(v*255)
    b = int(b*255)
    return '#%02x%02x%02x' % (r,v,b)

def progressif(x,y,nb):
    """ renvoie x pour 0, y pour 50, 
    et entre deux pour les intermédiaires"""
    return (x*(50-nb)/50 + y*nb/50)

def degrade_choix(col1,col2,col3,nb):
    """ retourne un dégradé entre col1 et col2 (nb<50)
    et entre col2 et col3 (nb>50)"""
    if nb>100:
        nb=100
    elif nb<0:
        nb = 0
        
    if nb<50:
        return tuple( progressif(col1[i],col2[i],nb) for i in (0,1,2) )
    else:
        return tuple( progressif(col2[i],col3[i],nb-50) for i in (0,1,2) )