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

2D Java Discussion :

Créer des icones en JAVA même


Sujet :

2D Java

  1. #1
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut Créer des icones en JAVA même
    Salut les développeurs.

    Je voudrais essayer de créer des icônes directement en JAVA même, dans le code de mon programme.

    Un peu à la manière de ce qui est expliqué dans ce tutorial :

    http://www.codeproject.com/useritems/SimpleIcons.asp

    Mais deux petites choses que je ne comprends pas dans ce tuto :

    - Comment sont définies les couleurs ? Un set de 2 couleurs par image ? Pourquoi juste deux couleurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private final static char[] patternChars = {'•', '·'};
    private Color[] okColours = {new Color(0, 100, 0), new Color(0, true)};
    private Color[] cancelColours = {new Color(180, 0, 0), new Color(0, true)};
    Ne serait-il pas plus intéressant de faire un seul code de couleur (exemple une lettre = une couleur) et l'appliquer à toutes les icônes à créer ?

    - Je n'arrive pas à reproduire le caractère "point gras" de la grille des icônes. Ca m'intrigue...

    Si quelqu'un possède un tutoriel un peu mieux que celui ci-dessus, je suis preneur. ;-)

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut Re: Créer des icones en JAVA même
    Salut,

    Citation Envoyé par calogerogigante
    - Comment sont définies les couleurs ? Un set de 2 couleurs par image ? Pourquoi juste deux couleurs ?
    Ben apparemment, les icônes prises pour le tutorial sont en deux couleurs... donc à quoi ça servirait d'en définir plusieurs si c'est pour n'en utiliser que deux?


    Citation Envoyé par calogerogigante
    Ne serait-il pas plus intéressant de faire un seul code de couleur (exemple une lettre = une couleur) et l'appliquer à toutes les icônes à créer ?
    Ca dépend... si toutes tes icônes peuvent être dessinées à partir de ton code de couleur, pourquoi pas...

    Citation Envoyé par calogerogigante
    - Je n'arrive pas à reproduire le caractère "point gras" de la grille des icônes. Ca m'intrigue...
    Alt 9642 chez moi... mais je ne trouve pas ce choix judicieux... la différence avec le point simple ne saute pas aux yeux (bon, c'est vrai que je vais voir mon ophtalmo vendredi prochain, mais quand même!)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut Re: Créer des icones en JAVA même
    Citation Envoyé par plegat
    Ben apparemment, les icônes prises pour le tutorial sont en deux couleurs... donc à quoi ça servirait d'en définir plusieurs si c'est pour n'en utiliser que deux?
    Oui, en effet. Parfois, je ne réfléchis pas. ;-)

    Citation Envoyé par plegat
    Ca dépend... si toutes tes icônes peuvent être dessinées à partir de ton code de couleur, pourquoi pas...
    J'aurais aimé qu'ils fassent un tutoriel plus général sur la création de sprites de cette manière, mais bon, à mieux relire ce tutoriel, en effet, il n'est pas si mal fait que ça !! ;-)

    Citation Envoyé par plegat
    Alt 9642 chez moi... mais je ne trouve pas ce choix judicieux... la différence avec le point simple ne saute pas aux yeux (bon, c'est vrai que je vais voir mon ophtalmo vendredi prochain, mais quand même!)
    Je trouve aussi que c'est pas génial comme choix, pour différencier les pixels en couleurs des pixels sans couleur.

    Bon, je crois que je vais retrousser mes manches et essayer de faire moi-même (sans doute en m'inspirant quand même beaucoup de ce tuto) une sorte de classe réutilisable, qui me permettrait de créer des icones par ce mécanisme de représentation par chaînes de caractères et codage de couleurs.

    Si je jugerais le résultat de mon travail satisfaisant, je le mettrais dans la partie "partager vos sources", comme j'ai déjà fait à une reprise ! ;-)

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut Re: Créer des icones en JAVA même
    Citation Envoyé par calogerogigante
    Je trouve aussi que c'est pas génial comme choix, pour différencier les pixels en couleurs des pixels sans couleur.
    Ton idée d'utiliser des lettres pour "coder" chaque couleur est intéressante. Je ne sais pas si l'effet visuel est suffisant pour avoir un aperçu, mais à la limite, en les choisissant bien (style o, i, m, +, - , ... ) , ça devrait aller.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Je suis en train d'éplucher la classe du tutorial :


  6. #6
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Je suis en train d'éplucher la classe du tutorial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class PatternColorFilter extends RGBImageFilter
    {
    ...
    }
    Y'a-t-il pas une erreur ?

    Le champs suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private BufferedImage image;
    ne devrait-il pas être déclaré ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static BufferedImage image;
    ?

    Et donc, dans la méthode createImage..., faudrait enlever la (re-)définition de la variable image "BufferedImage" ????

    [ EDIT : ] Oui, je confirme. Y'a bien une petite erreur. Celle que j'ai décrit plus haut !!

  7. #7
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Voilà. Je me suis trompé sur toute la ligne concernant le tutoriel de Doron Barak.

    Sa classe fait en réalité exactement ce que je voulais. On peut décrire un seul et unique code couleur pour toutes les images qu'on veut faire.

    Pour être complet dans ce post (et le mettre en résolu), je me permets de copier-coller ici son code, légèrement corrigé (cf ci-dessus), avec un exemple plus clair que celui de son site pour l'utilisation de cette classe.

    Ca marche à merveille. y'a qu'à copier coller cet exemple dans Eclipse :

    La classe qui crée l'image :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    import java.awt.*;
    import java.awt.image.*;
     
    public class PatternColorFilter extends RGBImageFilter
    {
    // Data members used by a specific PatternColorFilter instance..
    private String[] pattern;
    private char[]   patternChars;
    private Color[]  patternColours;
    private static BufferedImage image;
     
    private PatternColorFilter(String[] pattern, 
                                 char[] patternChars,
                                Color[] patternColours)
      {
      // The constructor is private to prevent anyone from creating unwanted instances..
      super();
      // Set the private data members..
      this.pattern =        pattern;
      this.patternChars =   patternChars;
      this.patternColours = patternColours;
      canFilterIndexColorModel = true;
      }
     
    public static synchronized Image createImage(Component c,
                                                 boolean transparent,
                                                 String[] pattern,
                                                 char[] patternChars,
                                                 Color[] patternColours)
      {
      // Check the data arrays specified and return null if they are invalid..
      if (patternChars == null || patternColours == null || pattern == null)
         {
         // Invalid data arrays..
         return null;
         } else if (patternChars.length != patternColours.length)
                {
                // Invalid data arrays..
                return null;
                }
      // Obtain the width and height of the pattern array and verify it is even..
      int width = 0;
      int height = pattern.length;
      for (int i = 0; i < pattern.length; i++)
        {
        if (width == 0)
          {
          width = pattern[i].length();
          } else if (width != pattern[i].length())
                   {
                   // Uneven pattern array..
                   return null;
                   }
        }
     
      // Create a BufferedImage to work with..
      // BufferedImage
      image = new BufferedImage(width, height,
                            transparent ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB );
      // Create an ImageProducer instance based on a PatternColorFilter instance..
      FilteredImageSource fis = new FilteredImageSource(image.getSource(),
                                                        new PatternColorFilter(pattern,
                                                                               patternChars,
                                                                               patternColours)
                                                        );
      // Produce and return the image..
      return c.createImage(fis);
      }
     
    public int filterRGB(int x, int y, int rgb)
      {
      // Is there a valid pattern to paint?
      if (pattern != null)
        {
        // Get the pattern's character..
        char c = pattern[y].charAt(x);
        // Loop through the pattern characters..
        for (int i = 0; i < patternChars.length; i++)
          {
          if (patternChars[i] == c)
            {
            // Find the matching pixel RGB value and return it..
            return patternColours[i].getRGB();
            }
          }
        }
      // Return the default RGB value specified by the method's invoker..
      return rgb;
      }
    }
    Et ma petite classe de test, avec la méthode Main :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    import java.awt.*;
    import javax.swing.*;
     
    class MaFenetre extends JFrame
    {
    public MaFenetre ()
      {
      setSize(300, 200);
      setTitle("Icones créées dans JAVA");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      Container contentPane = getContentPane();
      // Ajout du panel contenant les trois boutons
      contentPane.add( new ButtonPanel() );
      }
     
    public static void main(String [] args)
      {
      try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          }
      catch (Exception e) { }
     
      // Création de la fenêtre
      MaFenetre bg = new MaFenetre();
      // Affichage de la fenêtre
      bg.setVisible(true);
      }
    }
     
    /**
     * Classe pour le Panneau contenant les trois boutons
     */
    class ButtonPanel extends JPanel
    {
      private final char[] patternChars = {'V',  // vert
                                           'R',  // rouge
                                           'N',  // noir
                                           'J',  // jaune
                                           'B',  // bleu
                                           '.'}; // transparent
      private Color[] codeCouleurs = {new Color(0, 100, 0), // vert plus foncé
                                      Color.RED,
                                      Color.BLACK,
                                      Color.YELLOW,
                                      Color.BLUE,
                                      new Color(0, true)};
     
      private final String[] okPattern = {
        ".......VV",
        "......VV.",
        ".....VV..",
        "V...VV...",
        "VV·VV....",
        ".VVV.....",
        "..V......"};
     
      public ImageIcon okIcon =
      new ImageIcon(PatternColorFilter.createImage(this, true, okPattern,
                    patternChars, codeCouleurs));
     
      private final String[] cancelPattern = {
        "RR.....RR",
        ".RR...RR.",
        "..RR.RR..",
        "...RRR...",
        "..RR.RR..",
        ".RR...RR.",
        "RR.....RR"};
     
      public ImageIcon cancelIcon =
      new ImageIcon(PatternColorFilter.createImage(this, true, cancelPattern,
                    patternChars, codeCouleurs));
     
      private final String[] bonhomme = {
        ".......................",
        ".......................",
        "....NNNN......NNNN.....",
        ".......................",
        ".......................",
        ".....JJJ......JJJ......",
        ".....JJJ......JJJ......",
        ".......................",
        ".........JJJJ..........",
        ".........JJJJ..........",
        "...R..............R....",
        "....RR..........RR.....",
        "......RRRRRRRRRR.......",
        ".......................",
        ".......................",
        "......................."
        };
     
      public ImageIcon bonhommeIcon =
      new ImageIcon(PatternColorFilter.createImage(this, true, bonhomme,
                    patternChars, codeCouleurs));
     
    public ButtonPanel ()
      {
      JButton bout1 = new JButton(      okIcon);
      JButton bout2 = new JButton(  cancelIcon);
      JButton bout3 = new JButton(bonhommeIcon);
     
      add(bout1);
      add(bout2);
      add(bout3);
      }
    }
    Je suis sûr que le tutoriel de Doron Barak va servir à plein de gens !!
    ;-)

  8. #8
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Joli travail!

    Y'a plus qu'à mettre tout ça dans la page des sources Java pour la postérité!

    http://www.developpez.net/forums/viewtopic.php?t=215184
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  9. #9
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Non, car je ne veux pas voler le travail de Doron Barak.

    Sa classe est en réalité impeccable !!

    Je préfère donc laisser ça ici, comme un simple post.

    Quelqu'un cherchant l'info pour faire des icones en java n'aura qu'à faire la recherche sur Developpez.com.

    Merci aussi à toi pour ton intervention, Plegat !

    Bonne Pâques à tous.
    ;-)

  10. #10
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Points : 148
    Points
    148
    Par défaut
    je viens de tester ton truc c'est vraiment super !!!

    AH PUTAIN OUI !!!

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

Discussions similaires

  1. Créer des graphes avec java.
    Par ox@na dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 16/03/2012, 17h05
  2. Réponses: 2
    Dernier message: 09/01/2009, 19h12
  3. Réponses: 6
    Dernier message: 04/06/2008, 23h50
  4. Créer des objets avec Java Monkey Engine
    Par ToTo13 dans le forum 3D
    Réponses: 3
    Dernier message: 31/07/2007, 15h06
  5. Comment créer des icones ?
    Par VinnieMc dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 09/04/2006, 12h59

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