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

Lazarus Pascal Discussion :

Comment réduire le nombre de couleurs ?


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 762
    Points : 957
    Points
    957
    Par défaut Comment réduire le nombre de couleurs ?
    J’ai un nombre de couleurs déterminées (mettons 24) et je m’aperçois qu’il y a d’autres couleurs très approchante de celle de références dans mes images.

    Quel serait selon vous le meilleur algo pour les convertir en l’une de mes couleurs de références ?

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par der§en Voir le message
    J’ai un nombre de couleurs déterminées (mettons 24) et je m’aperçois qu’il y a d’autres couleurs très approchante de celle de références dans mes images.

    Quel serait selon vous le meilleur algo pour les convertir en l’une de mes couleurs de références ?
    Salut l'approche la plus courrantte est la Quantization (Rosetta code), Diffusion d'erreur cf "Dithering" : Algorithme de Floyd-Steinberg entre autres : Riemersma dither et voir ici

    Malheureusement je n'ai aucun code à te proposer c'est un sujet que je n'ai pas encore abordé dans mon projet. Tu devrais pouvoir trouver quelques codes sur le web pour Delphi et notamment dans GifImage ou GR32 (et BGRABitmap il me semble)

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    En recherchant sur le forum anglais, FPC "FPImage" dispose déja de l'algotihme de Floyd-Steinberg : voir ici Je ne savais pas
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #4
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 762
    Points : 957
    Points
    957
    Par défaut
    Merci pour les noms des différents algos, je vais creuser la question avec de bonne infos de base

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 140
    Points : 623
    Points
    623
    Par défaut
    J'arrive un peu tard mais en ce qui concerne BGRABitmap, il y a une unité BGRAColorQuantization pour faire cela. Les étapes à suivre sont les suivantes :
    • Charger l'image source dans un TBGRABitmap
    • Créer un TBGRAColorQuantizer avec la palette voulue
    • Soit appliquer le dithering sur l'image directement avec ApplyDitheringInplace
    • Ou bien générer une nouvelle image avec GetDitheredBitmap

    L'objet palette est défini dans l'unité BGRAPalette. Vous pouvez soit l'instancier et appeler la fonction AddColor, ou bien charger la palette à partir d'un fichier de palette.
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Intéressant ! J'ai fait un petit exemple rapide, juste pour comprendre le principe, avec une palette contenant différents degrés de bleu (sur le moment je n'avais pas d'autre idée).

    Code : 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
    procedure TForm1.DoButtonClick(Sender: TObject);
    var
      LPalette: TBGRAPalette;
      LQuantizer: TBGRAColorQuantizer;
      LChannel: byte;
    begin
      LPalette := TBGRAPalette.Create;
      LChannel := 255;
      repeat
        LPalette.AddColor(BGRA(0, 0, LChannel, 255));
        Dec(LChannel, 8);
      until LChannel = 7 ;
      LQuantizer := TBGRAColorQuantizer.Create(LPalette, FALSE);
      LQuantizer.ApplyDitheringInplace(daNearestNeighbor, FBitmap);
      LPalette.Free;
      LQuantizer.Free;
      Invalidate;
    end;
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 140
    Points : 623
    Points
    623
    Par défaut
    Oui effectivement tu peux faire cela.

    Si tu n'as pas de palette de départ, tu peux mettre l'image source en paramètre quand tu crées le TBGRAColorQuantizer et définir la propriété ReductionColorCount pour définir à combien de couleurs tu veux réduire la palette (par défaut c'est 256).
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Si tu n'as pas de palette de départ, tu peux mettre l'image source en paramètre quand tu crées le TBGRAColorQuantizer et définir la propriété ReductionColorCount pour définir à combien de couleurs tu veux réduire la palette (par défaut c'est 256).
    D'accord, merci pour le tuyau. Oui, c'est plus intéressant comme ça.

    Nom : result.jpg
Affichages : 274
Taille : 70,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      LPalette := TBGRAPalette.Create(FBitmap);
      LQuantizer := TBGRAColorQuantizer.Create(LPalette, FALSE, 50);
      LQuantizer.ApplyDitheringInplace(daNearestNeighbor, FBitmap);
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2014, 16h21
  2. Réponses: 7
    Dernier message: 30/06/2010, 16h56
  3. Comment réduire le nombre des clips ?
    Par yuyuboy dans le forum Flash
    Réponses: 0
    Dernier message: 07/01/2010, 08h30
  4. Réduire le nombre de couleurs
    Par Veovis dans le forum OpenCV
    Réponses: 1
    Dernier message: 21/04/2008, 10h12
  5. Comment réduire le nombre d'acces BD des Profile
    Par tetaslap dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/07/2007, 09h52

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