Définir la couleur d'un texte en fonction du fond

daddycool76 Messages postés 56 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 2 juillet 2007 - 21 mars 2007 à 09:41
daddycool76 Messages postés 56 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 2 juillet 2007 - 21 mars 2007 à 18:36
Bonjour à tous,
Une petite question :
Etant donné que dans mon application la couleur de fond est choisie par l'utilisateur (donc variable) ,existe-t-il un moyen simple permettant de définir la couleur d'un texte pour qu'il soit bien Visible ?

J'ai commencé un code mais je me demande si je ne suis pas en train de ré-inventer l'eau chaude :
Voila la procédure que je compte mettre en place :
Avec la couleur de fond:
1/ Conversion en RGB
2/ Conversion RGB en HSL (Teinte, luminosité, contraste)
3/ Extraction du paramètre de luminosité, choix d'une nouvelle luminosité (pour faire une sorte de négatif)
4/ Affectation de cette nouvelle couleur à mon texte.

Pensez vous que la marche à suivre est bonne? y'a-t-il moyen de faire plus simple ?
Merci pour vos eventuelles réponses...
^^@^^ +

7 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 mars 2007 à 11:31
Bonjour,

Pas le temps de chercher le bon raster, mais inspire toi de ceci, par exemple :

un label et une picturebox

Private Sub Command1_Click() Picture1.CurrentX 0: Picture1.CurrentY 0
 Picture1.Visible = True
 Picture1.Line (0, 0)-(Picture1.Width, 0), Label1.BackColor
 Picture1.Picture = Picture1.Image
 Label1.ForeColor = Picture1.Point(0, 0)
 Picture1.Cls
 Picture1.Visible = False
End Sub


Private Sub Form_Activate()
  Picture1.Move 0, 0, 1, 1
  Picture1.DrawStyle = 0
  Picture1.DrawMode = 6
  Picture1.Visible = False
End Sub




 
0
daddycool76 Messages postés 56 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 2 juillet 2007
21 mars 2007 à 13:07
Merci d'avoir pris  le temps de répondre jmfmarques. Mais si j'ai bien compris ton code, tu prends la couleur d'un pixel de la pictureBox pour définir la couleur du texte.

Désolé mais ce n'est pas ce que je souhaite faire. Je me suis sans doute mal exprimé dans mon premier post.

En fait, j'affiche dans une pictureBox du texte, des lignes, des cercles etc... (Tu as déjà vu mon prog, avec les cercles qui "bougent" avec la souris).


Le texte dont je souhaite redéfinir la couleur apparait dans un cercle dont la couleur de remplissage est défini par l'utilisateur. Du coup si la couleur du remplissage du cercle est jaune clair et que mon texte est blanc (valeur par défaut), le texte sera difficilement visible.


 Il faudrait que je puisse définir la couleur du texte en fonction de la couleur de remplissage des cercles de façon à ce que le texte soit bien lisible.

Voir image ci-dessous:
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 mars 2007 à 13:26
Ben....
Ce que j'ai écrit au dessus reste parfaitement vrai et adaptable....
Que tu utilises ou non une PictureBox en tremplin.
Seul le bon opérateur de raster est à rechercher...

Mais j'ai quand même une autre suggestion qui "me démange" depuis ta toute première question :

Dès lors que tu laisses à l'utilisateur final le choix de la couleur de tes petits cercles, laisse-lui donc également celui de la couleur du texte ....
(la philosophie est simple : soit l'on impose, soit on laisse faire, pensant que l'autre a d'autres goûts... et si tel est le cas... il pourrait fort bien, ma foi... aimer du texte vert-clair sur un fond violet, c'est-à-dire exactement ce que je déteste...)

PS : il en va de même en ce qui concerne la couleur des anneaux (lors d'une "sélection")

En laissant ces choix à l'utilisateur, d'une part, et en liant, d'autre part, ces choix faits une fois pour toutes (sauf envie de changer... et ce ne sera pas tous les jours), à un fichier texte ayant pour nom celui de l'utilisateur, tu peux fort bien faire en sorte qu'il n'ait pas à faire constamment de tels choix...

Ne perds donc pas ton temps avec de telles "bébelles" qui n'amélioreront pas vraiment ton appli.
0
daddycool76 Messages postés 56 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 2 juillet 2007
21 mars 2007 à 13:47
Tu as raison sur le fond mais cette petite appli sert en quelque sorte de "schéma synthétique" de mon appli principale.
L'utilisateur peut visualiser de façon trés synthétique le système mécanique 3d qu'il à créé sous l'appli principale.  
C'est pourquoi je veux restreindre au maximum les choix utilisateurs.

Par exemple les couleurs des bulles sont définies en amont dans mon appli principale...

Voila pour les raisons... Mais je ne suis pas buté non plus

PS : Qu'appelles tu Raster ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
daddycool76 Messages postés 56 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 2 juillet 2007
21 mars 2007 à 13:49
Heu....... En ce moment j'ai plutot du temps à perdre........ ;)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 mars 2007 à 15:19
L'opérateur RASTER ?

C'est ce qui définit comment une couleur doit être "peinte" dans un contexte ...
Long à exopliquer ...
Ouvre ton aide en ligne sur le mot RasterOp, celà vaudra mieux (tu en as toute une tartine...)

tiens ! un bout :
vbDstInvert &H00550009 Inverts the destination bitmap
vbMergeCopy &H00C000CA Combines the pattern and the source bitmap
vbMergePaint &H00BB0226 Combines the inverted source bitmap with the destination bitmap by using Or
vbNotSrcCopy &H00330008 Copies the inverted source bitmap to the destination
vbNotSrcErase &H001100A6 Inverts the result of combining the destination and source bitmaps by using Or
vbPatCopy &H00F00021L Copies the pattern to the destination bitmap
vbPatInvert &H005A0049L Combines the destination bitmap with the pattern by using Xor
vbPatPaint &H00FB0A09L Combines the inverted source bitmap with the pattern by using Or. Combines the result of this operation with the destination bitmap by using Or
vbSrcAnd &H008800C6 Combines pixels of the destination and source bitmaps by using And
vbSrcCopy &H00CC0020 Copies the source bitmap to the destination bitmap
vbSrcErase &H00440328 Inverts the destination bitmap and combines the result with the source bitmap by using And
vbSrcInvert &H00660046 Combines pixels of the destination and source bitmaps by using Xor
vbSrcPaint &H00EE0086 Combines pixels of the destination and source bitmaps by using Or
0
daddycool76 Messages postés 56 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 2 juillet 2007
21 mars 2007 à 18:36
ReBonjour,
J'ai compris (je crois) ta méthode. J'ai utilisé l'opérateur vbPatPaint. J'ai remarqué toutefois un problème : si la luminosité de la couleur approche de la moyenne l'inverse donne la même couleur.
C'est en tout cas ce que j'ai pu constaté (je débute alors je ne suis sûr de rien)
 Finalement j'ai utilisé la méthode que j'ai décrite dans mon premier post... (ça peut toujours changer)
Merci  de ton aide ... ^^@^^ +
0
Rejoignez-nous