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 Forms Discussion :

Changer la couleur d'un PNG


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Par défaut Changer la couleur d'un PNG
    Salut tout le monde,

    Je développe actuellement une application en C# réalisant du watermarking avec des chaînes de caractères ou des PNG. La superposition marche très bien dans les deux cas mais j'ai cependant un petit souci. J'aimerais pouvoir sélectionner une couleur différente pour le PNG (qui est monochrome, de base noir & alpha seulement). J'utilise le code ci-dessous pour changer de couleur :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    private Image replaceColor(Color clrSelected, Color clrToReplace)
    {
        Bitmap bitmap = new Bitmap(imgPNG);
        for (int x = 0; x < bitmap.Width; x++)
        {
            for (int y = 0; y < bitmap.Height; y++)
            {
                if (GetKnownColorName(bitmap.GetPixel(x, y).R, 
                                                bitmap.GetPixel(x, y).G, 
                                                bitmap.GetPixel(x, y).B) == clrToReplace)
                {
                    bitmap.SetPixel(x, y, clrSelected);
                }
            }
         }
         Image imgTemp = Image.FromHbitmap(bitmap.GetHbitmap());
         return imgTemp;
    }

    Seulement voilà, je pense que lors de la conversion de Bitmap à Image le canal alpha ne doit pas être conservé, la transparence disparaît et je me retrouve avec un beau rectable (qui est quand même de la couleur demandé )
    Ma question est la suivante : quelle est la meilleure manière de procéder pour changer une couleur d'un PNG sans toucher à sa transparence?

    Merci pour vos éventuelles suggestions.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Par défaut
    Au final je prend un BMP à la place d'un PNG, je remplace la couleur principale et je fais un MakeTransparent(clrBakcground) de la couleur qui ne m'intéresse pas avant de fusionner les deux et ça marche tiptop

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    parcourir les pixels est très lent

    si tu veux que ca aille vite et que ca prenne 3 lignes
    drawing.imaging.colormap (via un drawimage avec imageattribute)
    il y a aussi colormatrix qui permet de changer les teintes carrément ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    Si tu veux faire des traitements sur une image tu vas probablement te heurter à des problèmes de performance si tu manipule de grandes images :/ par exemple si ton image fait 800x600, tu appelle 480 000 fois tes méthodes getPixel et setPixel. Tu pourrais passer par du code non managé pour améliorer ton traitement exploitant la classe Bitmap qui fournit une méthode LockBits permettant d'obtenir un objet bitmapData. L'image va chargée en mémoire et il sera possible de la manipuler à l'aide des pointeurs.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Désolé mauvaise manipulation message à supprimer

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le plus rapide serait de modifier la palette il me semble...

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    les classes .NET utilisant gdi+ permettent déjà pas mal de choses ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GD] Changer la couleur d'un fichier PNG
    Par The Transporter dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 09/01/2009, 14h43
  2. Réponses: 0
    Dernier message: 11/10/2008, 14h31
  3. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02
  4. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37
  5. Changer les couleurs de la palette avec du RGB
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 11
    Dernier message: 13/01/2003, 08h55

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