IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Degradé de couleur


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut Degradé de couleur
    Bonjour à tous,

    j'ai encore un probleme de dev.

    J'ai un bitmap dégradé vert chaque pixel ayant la couleur (R,V,B) et je voudrais le convertir dans un degradé de ton bleu avec pour couleur de base (0,128,255) par exemple.

    Pourrriez vous m'aider et me dire comment faire passer de (RVB) à (R',V',B') ?

    Merci d'avance,
    YWAN.

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    et bé y'a personne qui a un tuyau sur ce genre de bidouille du RGB !!! ???

    ou quoi ?

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu peux essayer en permutant directement le vert et le bleu, sinon il faudra un truc plus "space"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Je suis pas sur que ça marche, mais tente une sorte d'interpolation :

    Disons que tu a deux couleurs pour ton degradé de depart : couleur de depart et couleur d'arrivée :

    (Rd,Vd,Bd) et (Ra,Va,Ba) leurs composantes RVB

    Disons que tu as deux couleurs pour ton degradé d'arrivée : couleur de depart et couleur d'arrivée :

    (R'd,V'd,B'd) et (R'a,V'a,B'a) leurs composantes RVB

    Pour chaque composante, c'est la meme chose, donc j'explique pour le R.

    Pour chaque pixel(R,V,B) de ton image de base, tu calcules la quantité de couleur de depart et de couleur d'arrivée :

    Ca revient à determiner n et m tels que R = n*Rd + m*Ra

    Evidemment, il faut une autre contrainte, paske comme ça, l'équation n'est pas solvable :

    Par exemple, pour un degradé linéaire, tu as n + m = 1
    donc R = n*Rd + (1-n)*Ra et m = 1-n

    Ensuite, pour chaque pixel de ton image de destination, tu as R' = n*R'd + m*R'a

    Je suis sûr de rien, ce n'est qu'une idée...

    -----------------------------------

    Si tes degradés partent du blanc ou du noir, tu peux aussi calculer la luminosité de chaque pixel de l'image source (en convertisant le pixel en niveau de gris, par exemple).

    Puis pour chaque pixel de l'image destination, tu peux simplement multiplier les composante R,V,B de la couleur d'arrivée par la luminosité.

    Evidemment, il faut aussi appliquer un coef pour "normaliser", par exemple 1/maxLuminosité



    --------------------------------

    Dans l'absolu, c'est surement plus simple et plus precis et plus rapide de construire ton nouveau degradé à partir de rien, à moins que ce ne soit une forme tres spéciale.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    Merci pour ton conseil, je vais essayer ta methode


    mais je ne peux pas construire le degrade a partir de rien : en fait j'ai un degradé vert et je calcule une ombre portée sur ce fond degradé et je voudrais permuter la couleur de l'ombre du vert (dgrade) a un bleu degrade aussi ... je vais donc essayer ta methode.
    Images attachées Images attachées  

  6. #6
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    C'est pour calculer une ombre portée ?

    Dans ce cas, c'est différent...

    Le plus bourrin, mais le plus joli, ce serait un truc du genre :

    Pour chaque pixel qui doit avoir une ombre, tu calcules pour chaque pixel de l'image qui est endessous un coef dependant de la distance et de l'orientation (ce coef doit tendre vers 0 : rapidement = petite ombre, lentement = grande ombre)

    Tu accumules ces coef sur toute l'image, en les limitant à une valeur max.

    Ensuite pour chaque pixel de l'image qui est dessous, tu ajoute du bleu multiplié par le coef...

    Si tu utilise un logarithme ou un truc du genre pour la relation distance-coef, t'auras un truc joli. Si t'utilises une formule linéaire, ce serait plus "robotique"

    Maitenant, si les calculs doivent aller vite alors tu peux precalculer une bitmap intégrant une transparence alpha :

    - Pour chaque objet dont il faut afficher l'ombre, tu prends un HBITMAP un peu plus grand.
    - Tu remplit ce HBITMAP de pixel transparents
    - pour chaque pixel de la forme de base, tu ecrit un pixel bleu et opaque dans le HBITMAP
    - tu applique un filtre du type "BLUR" dans la direction souhaitée : tu obtient une image bleu avec la forme de ton objet de base et qui se degrade dans la direction de l'ombrage.

    Ensuite, quand tu dessines un objet, il suffit de coller cette bitmap (avec alphablt) sur l'image de fond et de dessiner l'objet. Aux memes coordonnées, bien sur.

  7. #7
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Euh, soi dit en passant, si c'est pour generer un fond qui sera toujours le meme, ce sera plus rapide/plus joli/plus simple avec photoshop....

    Il te suffit de creer une image PNG (ou autre, tant qu'il y a un canal alpha) qui soit l'ombrage de ton objet.

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    en fait aujourd'hui on utilise photofiltre mais on veut integrer ces options dans notre outil de dev maison aussi j'ai l'algo de calcul de l'ombre cela donne l'image que je t'ai donné en visu mais cette ombre est sur degradé vert :
    - fond degrade - % ombre * fond degrade
    - blur sur frontiere
    ca c okay
    maintenant je voudrais que l'ombre soit bleu et plus de la couleur du fond vert ... et c la que je seche !!!

  9. #9
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Et si tu fait :

    - fond degrade - % ombre * fond degrade 2

    avec fond degrade 2 un degradé bleu ?

    Il faudrait juste le recaler en x et en y par rapport au coordonnées de base de l'objet à ombrer.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    oui j'y ai opense mais comment generer un fond degrade bleu de meme intensite que celui de depart afin de ne pas faire discontinu : je connais RVB du fond vert comment le migrer dans le meme ton mais avec la teinte bleu ???
    et on en revient au meme probleme

  11. #11
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    C'est là qu'intervient le canal alpha !

    Ton degradé bleu utilisé pour l'ombrage doit etre un degradé de bleu vers transparent.

    Ainsi, collé sur le fond vert degradé (n'importe quel autre fond) il se melange peu à peu à celui-ci !

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    je comprend pas tchniquement ce que je dois faire pour realiser cela

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    okay j'ai compris avec ton explication de la transparence mais quand tu veux sauvegarder le HBITMAP avec une couche alpha comment fais tu ?

  14. #14
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    RGBQUAD comme format, il me semble...

    Sinon fait une recherche :-)

    D'ailleurs, d'une facon generale, tout ce qui est ombrage se fait bien plus simplement en utilisant un canal alpha créé "intelligement" : il te suffit ensuite d'alphablt cette HBITMAP !

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    okay j'ai pas tout compris sur cette fameuse couche alpha ...
    pour moi j'ai un bitmap (tableau de pixel) et je veux le sauver sur le dur ... couche alpha ou pas, ombre ou pas c du chinois pour moi la couche alpha !!!
    et puis ca doit bien pouvoir se coder d'une maniere ou d'une autre avant l'affichage parce que je cherche pas a afficher cette ombre mais a la stocker sur le dur pour une utilisation posterieure !!!

    enfin bref merci pour ton aide ce n'est pas la peine de te vexer !!! je debute en graphisme et puis voila !!!

  16. #16
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    La couche alpha, c'est des infos supplementaire sur chaque pixel (en plus de R,V et B)

    En general, c'est la transparence.

    Par exemple alpha = 0 => pixel opaque (normal)
    et alpha = 255 => pixel transparent

    En win32, y'a des fonctions alphablt qui fonctionne comme bitblt mais qui prennent en compte la transparence (le canal alpha) au moment d'afficher les pixels : si tu as un alpha = 128 (50%) le pixel resultat a la couleur moyenne entre le pixel du fond et le pixel ecrit.

    Donc si tu crée une HBITMAP bleue (toute bleue) avec une valeur alpha de plus en plus grande vers la droite, lorsque tu l'ecrit à l'ecran, tu obtient du bleu à gauche et plus tu va vers la droite, plus tu obtient un melange entre le bleu et le fond. Et tout à droite, tu as plus que le fond (alpha = 100%, donc bleu transparent)

    C'est tres utile pour afficher des images en semi-transparence, pour faire des ombres (il suffit de coller l'ombre sous forme d'une image de plus en plus transparente sur les bord) et pour toute sorte d'effet....

    Le fait que tu sauves sur le disque ou sur l'ecran ne change rien.

    Si tu n'est pas familier avec l'alpha, fait une recherche sur google (alpha channel ou autre...) tu verra, ca peut sacrement de simplifier la vie en evitant de melanger des teintes à la main, puisque ça permet de mettre la quantité de melange comme un parametre pour chaque pixel. Donc plus besoin de te soucier des couleurs !

  17. #17
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    D'ailleurs, tant que j'y pense, regarde du coté de photoshop (au moins des tutoriels) la pluspart des manips realisée à la main sous photoshop peuvent se coder tres simplement, car beaucoup d'effet sont simplement des ecritures de pixels avec le bon alpha.

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 11
    Points
    11
    Par défaut
    merci pour ton explication,

    Ywan

Discussions similaires

  1. degrader des couleurs
    Par 18Marie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 31/07/2006, 11h37
  2. Faire un dégradé de couleur
    Par hasan dans le forum Java ME
    Réponses: 3
    Dernier message: 05/04/2006, 14h57
  3. dessiner un triangle avec degradé de couleurs
    Par xantares dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2006, 11h59
  4. Excel: Comment créer un degradé de couleurs dans cellules?
    Par Turlututuh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/12/2005, 00h04
  5. [TP]dégradé de couleur
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 10/11/2002, 23h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo