Modifier les couleurs comme un daltonien les voit

Soyez le premier à donner votre avis sur cette source.

Vue 8 995 fois - Téléchargée 288 fois

Description

'Programmé par SonicK02
'il n'y a ke les boutons nored et nocolour qui sont fonctionnels pour l'instant
'il s'agit d'un programme pour simuler la vue d'un daltonien
'pour l'instant je ne me suis attaqué qu'au rouge mais c'est pareil pour les autres
'couleurs
'le probleme qui s'est posé c'est que je ne voulais pa que supprimer le rouge pur
'(255,0,0) mais aussi les tons de rouge
'le probleme c'est que d'autres couleurs ont un taux élevé de rouge
'(par exemple le blanc et le violet...)
'alors qu'un daltonien voit très bien ces couleurs
'donc il m'a fallu tenir compte du taux de rouge
'et du taux de bleu et de vert
'si il y a bcp de rouge et peu d'autres couleurs il faut baisser la valeur
'dur rouge en conséquence...
'd'ou n programme plutôt tordu
'maintenant le vrai probleme : il est très lent à cause des 4 boucles imbriquées
'et plante au bout de 10sec lol

Conclusion :


svp aidez moi...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_tobby
Messages postés
17
Date d'inscription
jeudi 16 mai 2002
Statut
Membre
Dernière intervention
9 mars 2010
-
Voila le module complet avec le ratio :

Tobby.


Option Explicit
Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function SetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Global rRed As Long, rBlue As Long, rGreen As Long
Global CoefRed As Double, CoefBlue As Double, CoefGreen As Double
Dim ratio As Double

'Une fonction qui sépare les couleurs rouge vert et bleu d'un point
Public Function RGBfromLONG(LongCol As Long)
Dim Blue As Double, Green As Double, Red As Double
Blue = Fix((LongCol / 256) / 256)
Green = Fix((LongCol - ((Blue * 256) * 256)) / 256)
Red = Fix(LongCol - ((Blue * 256) * 256) - (Green * 256))
rRed = Red
rBlue = Blue
rGreen = Green
End Function

'la fonction en elle même
Public Sub PasRouge(picBox1 As PictureBox, picBox2 As PictureBox)

' ces coefficients sont a adapter au degre de daltonisme
CoefRed = 1
CoefBlue = 0.5
CoefGreen = 0.5

On Error Resume Next
Dim h As Integer, W As Integer
Dim C As Long, A As Long, B As Long
picBox2.ScaleMode = 3
picBox1.ScaleMode = 3
'boucle qui permet de scanner chaque point de l'image
For h = 0 To picBox1.ScaleHeight
For W = 0 To picBox1.ScaleWidth
'récupere la couleur du point M(h,W)
C = GetPixel(picBox1.hDC, W, h)
'et décomposer ses couleurs
RGBfromLONG C

'boucle qui permet de comparer le taux de rouge par rapport aux autres
'couleurs et réduire sa valeur
'For A = 0 To 255
' For B = -255 To 0
' If rRed >= A Then
' If (rBlue + rGreen) / 2 <= B Then
' rRed = rRed - (A + B)
' B = B - 2
' End If
' End If
' DoEvents
' Next B
'Next A

'If rRed < 0 Then
' rRed = 0
'End If

' If rRed > CoefGreen * rGreen + CoefBlue * rBlue Then
' rRed = rRed / CoefRed
' End If

' calcule le rapport entre le rouge et les autres couleurs
ratio = rRed / (CoefGreen * rGreen + CoefBlue * rBlue)
' interdit l'augmentation du niveau du rouge
If (CoefRed * ratio) > 1 Then
' reduit le rouge proportionnelement a son coef et a son rapport
rRed = rRed / (CoefRed * ratio)
End If


DoEvents

'stocke les couleurs du nouveau point dans C
C = RGB(rRed, rGreen, rBlue)
'et affiche le point
SetPixel picBox2.hDC, W, h, C
Next W
Next h
End Sub
SonicK02
Messages postés
14
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
2 avril 2004
-
juste une précision : j'ai trouvé un site avec des images qui pourraient illustrer mes propos, le résultat que je veux obtenir :

http://perso.wanadoo.fr/tiphaine.louis/Experiences.htm

voila

SonicK02
SonicK02
Messages postés
14
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
2 avril 2004
-
T'inquète pas Dede y'a pas de problème c'est vrai que soumettre un programme qui n'est pas encore finit sur le site n'est pas tellement judicieux...
Moi je cherche toujours à avoir un bon résultat tout en ayant un programme rapide, ce n'est pas facile.
Tout ce que j'ai obtenu pour l'instant c'est des images dont la couleur rouge est réhaussée ou diminuée mais en affectant les autres couleurs !

SonicK02
cs_Dede
Messages postés
61
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
24 juillet 2006
-
Rien de mechant dans mon commentaire.
L'idee me parrait bonne, mais je pense que ce n'est pas l'emplacement ou il devrait etre. Les problemes que tu soummets sont plutot du ressort du forum. A part cela, aucune agressivite, et je ne me place pas plus haut que toi en prog.
Bonne continuation,
Dede.
SonicK02
Messages postés
14
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
2 avril 2004
-
D'abord je répond à DeDe car je sais que le daltonisme est plus complexe mais tu n'as pas du regarder la source de très près. Je le sais très bien car je fais ce programme à cause de mes études et je fais un exposé sur ce sujet...
En tout cas ce source sera mis à disposition dès qu'il sera entièrement fini et concernera toutes les couleurs. Je me uis juste intéressé au rouge car le procédé pour les autres couleurs sera le même.
Enfin je voulais ajouter que il s'agit là de mon tout premier code en VB et en tout d'ailleurs...

Merci beaucoup Tobby pour tes commentaires
J'ai regardé ta partie mais j'ai déja réussi à réaliser cet effet mais c'est vrai qu'il n'est pas du tout réaliste. La vraie difficulté de ce programme est qu'il faut modifier le rouge en fonction des autres couleurs pour ne pas dégrader celles-ci, donc de faire un dégradé uniforme comme tu l'as dis. C'est pour cela que j'avais conçu deux boucles internes.
L'algorythme créé était de mon invention, mais il n'est pas très au point...
Ton systeme de ratio à l'air intéressant, je vais essayer de voir ça car la partie de code n'a pas l'air de marcher mais bon ca vient peut être de moi...

SonicK02

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.