Gambas France BETA


Pas de compte ? Incription

Color.RGB (gb.sdl)

Ce sujet est résolu.

1
AuteurMessages
Fly06#1 Posté le 23/4/2012 à 20:19:00
Bonsoir,

Cette fonction permet de définir une couleur en lui passant son code RGB (3 premiers paramètres) et son niveau d'opacité (dernier paramètre optionnel) :
http://gambasdoc.org/help/comp/gb.sdl/color/rgb?fr

Ce dernier paramètre ne semble pas pris en compte sous GB2 comme sous GB3.

Le problème vient probablement du composant gb.sdl que je n'arrive pas sélectionner du fait des nombreuses incompatibilités...

Quelqu'un a déjà rencontré ce problème ?

Merci.
Fly06#2 Posté le 25/4/2012 à 21:15:28
Bon il semble que le problème ne vienne pas de la fonction Color.RGB() qui retourne bien des valeurs différentes selon la valeur du paramètre alpha mais de la propriété Foreground du contrôle Label qui ne tient pas compte de la valeur de alpha (test G3)...

1
Label1.Foreground = Color.RGB(255, 127, 127, 123)

Est-ce que quelqu'un (parmi les 5 personnes qui fréquentent ce forum) peut confirmer (ou infimer) mon propos ?

Merci pour votre aide.
spheris#3 Posté le 4/5/2012 à 21:57:52
GB2 et l'alpha, tu oublies.
Hors mis un semblant de transparence sur les labels en GB2, l'alpha n'est quasi pas géré.
A voir en GB3 que je n'utilise jamais pour l'instant.
;)
Fly06#4 Posté le 5/5/2012 à 10:22:42
Merci pour le retour spheris.

A priori, la composante alpha n'est interprétée ni dans GB2 ni dans GB3 (dans le contexte qui m'intéresse).

Sous GB3 seul (?) l'objet Paint semble gérer correctement l'opacité.

Code du programme exemple Painting 3.0.90 :
1
Paint.Brush = Paint.Color(Color.RGB(255, 127, 127, 153))

http://gambasdoc.org/help/comp/gb.qt4/paint/color?fr&v3
Prokopy#5 Posté le 7/5/2012 à 13:40:45
Kinder PinguiJe vais peut-être dire une bêtise mais ... pourquoi vouloir mettre de la transparence sur la couleur du texte d'un label ? Ça risque d'être illisible non ?
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Fly06#6 Posté le 7/5/2012 à 20:07:33
C'est pour créer un effet de fading sur un label qui sert à afficher des infos non persistantes.

Actuellement les infos s'affichent puis disparaissent au bout de 5 secondes.

J'aurais aimé qu'elles disparaissent progressivement.

Prokopy#7 Posté le 7/5/2012 à 21:54:08
Kinder PinguiCe que tu peux faire, plutôt que de faire un fondu sur la transparence, c'est de faire un fondu vers la couleur de fond du label. Visuellement l'effet sera le même. :)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Fly06#8 Posté le 8/5/2012 à 20:42:26
Comment retrouver les composantes RGB d'une couleur donnée ?

Merci.


Prokopy#9 Posté le 8/5/2012 à 22:37:32
Kinder PinguiComme ça :

1
2
3
4
DIM infoCouleur AS ColorInfo = Color[macouleur]
PRINT infoCouleur.Red
PRINT infoCouleur.Green
PRINT infoCouleur.Blue


Voilà. Mais dans ton cas il y a plus simple.
Si elle est linéaire, tu peux calculer la couleur de ton animation de transition à un instant t entre 0 et 1, en utilisant Color.Gradient() :

1
PRINT Color.Gradient(couleurDebut, couleurFin, t)


Exemple avec un bouton qui change de couleur quand on clique dessus :

1
2
3
4
5
6
7
8
9
10
11
PUBLIC SUB Button1_Click()

DIM i AS INTEGER = 0
DIM colorsrc AS INTEGER = Color.Black
DIM colordst AS INTEGER = Color.White
FOR i = 0 TO 10
Button1.Background = Color.Gradient(colorsrc, colordst, i / 10)
WAIT 0.1
NEXT

END
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Fly06#10 Posté le 9/5/2012 à 20:31:41
Merci pour ton aide Prokopy :-)

J'ai implémenté la première soluce (ColorInfo) dans un projet de test.

Voici le code du FMain :

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
' Gambas class file

PRIVATE fading AS FLOAT = 0.1

PRIVATE diffRed AS INTEGER
PRIVATE diffGreen AS INTEGER
PRIVATE diffBlue AS INTEGER

PRIVATE myColor1 AS Integer[] = [255, 0, 0]
PRIVATE myColor2 AS Integer[] = [0, 0, 255]

PUBLIC SUB _new()

ME.Center()

END

PUBLIC SUB Form_Open()

Label1.Foreground = Color.RGB(myColor1[0], myColor1[1], myColor1[2])

END

PUBLIC SUB Button1_Click()

DIM frgCouleur, bkgCouleur AS INTEGER
DIM infoFrgCol, infoBkgCol AS ColorInfo

frgCouleur = Label1.Foreground
bkgCouleur = Color.RGB(myColor2[0], myColor2[1], myColor2[2])

infoFrgCol = Color[frgCouleur]
infoBkgCol = Color[bkgCouleur]

diffRed = CInt((infoFrgCol.Red - infoBkgCol.Red) * fading)
diffGreen = CInt((infoFrgCol.Green - infoBkgCol.Green) * fading)
diffBlue = CInt((infoFrgCol.Blue - infoBkgCol.Blue) * fading)

Button1.Enabled = FALSE
Timer1.Enabled = TRUE

END

PUBLIC SUB Timer1_Timer()

DIM frgCouleur, bkgCouleur AS INTEGER
DIM newRed, newGreen, newBlue AS INTEGER
DIM infoFrgCol, infoBkgCol AS ColorInfo

frgCouleur = Label1.Foreground
bkgCouleur = Color.RGB(myColor2[0], myColor2[1], myColor2[2])

infoFrgCol = Color[frgCouleur]
infoBkgCol = Color[bkgCouleur]

newRed = makeNewRGB(infoFrgCol.Red, infoBkgCol.Red, diffRed)
newGreen = makeNewRGB(infoFrgCol.Green, infoBkgCol.Green, diffGreen)
newBlue = makeNewRGB(infoFrgCol.Blue, infoBkgCol.Blue, diffBlue)

frgCouleur = Color.RGB(newRed, newGreen, newBlue)
Label1.Foreground = frgCouleur

IF (frgCouleur = bkgCouleur) THEN
Timer1.Enabled = FALSE
Button1.Enabled = TRUE
swapColors()
ENDIF

END

PRIVATE FUNCTION makeNewRGB(oldRGB AS INTEGER, targetRGB AS INTEGER, diffRGB AS INTEGER) AS INTEGER

DIM newRGB AS INTEGER

newRGB = oldRGB - diffRGB

IF ((diffRGB > 0) AND (newRGB < targetRGB)) OR ((diffRGB < 0) AND (newRGB > targetRGB)) THEN
newRGB = targetRGB
ENDIF

RETURN newRGB

END

PRIVATE SUB swapColors()

DIM buffer AS Integer[]

buffer = myColor1
myColor1 = myColor2
myColor2 = buffer

END


Le FMain contient 3 contrôles : 1 label, 1 bouton et 1 timer.

C'est le timer qui permet de réaliser le passage progressif de la propriété Foreground du label de myColor1 à myColor2.
gambix#11 Posté le 18/5/2012 à 12:51:47
Faire simple !Je vous propose de regarder la classe CAnimation et son fonctionnement dans le nouvel exemple MediaPlayer de Gambas3 fait par Benoit Minisini.

Il est présent dans l'exemple phototouch aussi.

J'ai trouvé cette classe simple et élégante, Il gère avec ça les panneau et les bouton, fadin et fadout. Mais le miracle de cette classe c'est qu'elle peu gérer l'evolution de n'importe quel propriété
Moins de texte dans une signature c'est agrandir son espace.
Fly06#12 Posté le 18/5/2012 à 20:12:16
@Gambix:

Merci pour l'info mais j'ai intégré le code de mon dernier post dans mon projet et c'est fonctionnel.

Donc problème réglé pour moi :-)
1