Retrouver une couleur...
Olympiades mathématiques, énigmes et défis
-
apidou
- Messages: 2
- Enregistré le: 19 Mar 2010, 21:36
-
par apidou » 20 Mar 2010, 09:00
Bonjour,
Je développe une petite application informatique et j'ai un problème de math.
Comme je suis pas bien bon je galère...
J'ai une couleur codée de cette façon :
color = (red * 65536) + (green * 256) + blue
ex: 16776960 pour jaune
J'aimerai retrouver les 3 inconnues red green et blue (<=256) (couleur RGB)
Comment faire ?
J'ai trouvé une solution mais qui apparemment, elle n'est pas bonne car des fois ce n'est pas la bonne couleur.
Red = colour mod 256
Green = (((colour - Red)mod 65536) \ 256 )
Blue = ( colour - (colour mod 65536)) \ 65536
l'opérateur modulo donne le reste de la division entière entre 2 nombres.
ex: 5%2=1
Si quelqu'un peut m'éclairer car pour l'instant je ne comprends pas la logique mathématique pour retrouver le première couleur ....
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 20 Mar 2010, 09:24
salut,
color = (red * 65536) + (green * 256) + blue
prenons n la valeur de color.
n/65536 = R
(n-R*65536)/256 = G
(n-R*65536-G*256)=B
avec la division qui te donne la partie entiere style 5/2 = 2
Ex : le jaune te donne ici
R = 16776960/65536 = 255
G = (n-R*65536)/256 = (16776960 - 255*65536)/256 = 255
B = (n-R*65536-G*256) = (16776960 - 255*65536 - 255*256) = 0
la vie est une fête
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 20 Mar 2010, 09:46
Une autre méthode :
tu comptes en base 256, (65536 = 256^2)
une manière pe plus simple, c'est de convertir ton nombre en binaire (par exemple tout entier est un binaire...), pis de prendre des groupes de bits de 8 bits. Donc tu pars de la droite, et tu fais des groupes de 8 bits (et eventuellement le troisieme groupe contient un peu moins de 8 bits (tu le completes avec des zeros sur la gauche).
Tu obtiens trois groupes de bits, le premier en partant de la droite te donne B, le second G et le dernier R.
exemple :
16776960_(10)=111111111111111100000000
le premier groupe donne : 00000000
le second : 11111111
le dernier : 11111111
le premier en decimal donne 0
le second 255
et le dernier 255
la vie est une fête
-
apidou
- Messages: 2
- Enregistré le: 19 Mar 2010, 21:36
-
par apidou » 20 Mar 2010, 10:17
Un grand merci pour ces 2 solutions claires et détaillées.
Je viens de tester et cela fonctionne sans soucis !
-
leanj
- Membre Naturel
- Messages: 57
- Enregistré le: 29 Déc 2012, 20:59
-
par leanj » 12 Oct 2023, 07:39
il manque une parenthèse . tu programmes avec Mathlab ?
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 14 invités