Bonjour,
je souhaite avoir à la place du type Icon: une Shape. Avez vous une idée comment les convertir ?
merci![]()
Bonjour,
je souhaite avoir à la place du type Icon: une Shape. Avez vous une idée comment les convertir ?
merci![]()
Tu réalises sans doute :
- qu'une Icon est un bitmap, un ensemble de pixels qui ont chacun une couleur parmis 24 millions et sont plus ou moins opaques.
- qu'une Shape est un chemin vectoriel, décrivant par où passe le chemin avec des fonctions mathématique, mais sans indiquer la couleur du chemin, et sans parler de pixel.
Ce sont donc deux choses qui n'ont pas de rapport entre elles, à part à la rigueur le fait qu'elles sont en deux dimensions.
Je suppose qu'il doit doit être possible de calculer le contour opaque d'une Icon, et de l'exprimer en fonction d'une Shape approchée.
Mais je ne connais pas de bibliothèque qui fasse ça.
Non, une Icon n'est pas forcément un image, une icone peut très bien être un ensemble d'instructions Java2D, donc du vectoriel si l'on veux...
En effet
Exemple d'Icon vectorielle:
Sachant que l'on pourrait très bien modifier la Shape au moment du paintIcon en fonction de la taille du composant.
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 public class ShapeIcon implements Icon{ private Shape shape = new Rectangle2D.Float(0,0,20,20); public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setColor(Color.BLUE); g2d.draw(shape); g2d.dispose(); } public int getIconWidth() { return shape.getBounds2D().getWidth(); } public int getIconHeight() { return shape.getBounds2D().getHeight(); } }
Oui, bon, on peut implémenter une Icon à base de vectoriel et de couleurs.
En attendant, une Shape, ça fait du getPathIterator(), du contains(), et du intersects().
Une Icon, ça fait du paintIcon(), et on sait très bien d'où on les chope en général.
L'idée de convertir une Icon générale vers Shape n'est pas précisément définie, d'une part, et c'est du calcul de chemin pas forcément trivial, d'autre part.
En fait tu as pris la question à l'envers, il veut remplacer une icone par une shape dans un composant.
De fait il n'a qu'à embedder sa Shape dans une Icone, ou dessiner la chape dans une image qu'il balance dans une IconImage et le tour est joué...
Partager