Transformer un tableau Icon[] en Image
Projet gus05 de développement Java :: Chantiers :: Chantiers graphiques :: Manipuler les objets Icon
Page 1 sur 1
Transformer un tableau Icon[] en Image
L'intérêt de transformer un tableau d'icônes (Icon[]) en Image (et donc en ImageIcon) est de faire de la composition d'icônes à partir de plusieurs icônes de base.
Et la composition d'icônes, qu'est-ce que c'est ? Prenons un exemple simple issu d'un de mes logiciels : Voici un aperçu de boutons permettant des actions d'ajout, d'édition, de suppression, de recherche et de commentaire rapide sur trois bases de données prévues pour stocker des données de comptabilité.
Cela fait 15 boutons munis chacun a priori d'icônes distinctes. Mais grâce à la composition d'icônes, je peux les obtenir à partir de seulement 8 icônes de bases dont voici les fichiers gif associés.
Sympa, non ?
J'aurai l'occasion de revenir sur ce mécanisme et de l'approfondir par la suite.
L'entité gus.image.iconstoimage proposée ici est en fait une amélioration de l'entité gus.image.icontoimage précédemment présentée.
Et la composition d'icônes, qu'est-ce que c'est ? Prenons un exemple simple issu d'un de mes logiciels : Voici un aperçu de boutons permettant des actions d'ajout, d'édition, de suppression, de recherche et de commentaire rapide sur trois bases de données prévues pour stocker des données de comptabilité.
Cela fait 15 boutons munis chacun a priori d'icônes distinctes. Mais grâce à la composition d'icônes, je peux les obtenir à partir de seulement 8 icônes de bases dont voici les fichiers gif associés.
Sympa, non ?
J'aurai l'occasion de revenir sur ce mécanisme et de l'approfondir par la suite.
L'entité gus.image.iconstoimage proposée ici est en fait une amélioration de l'entité gus.image.icontoimage précédemment présentée.
- Code:
package gus05.entity.gus.image.iconstoimage;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;
public class IconsToImage implements Entity, Transform {
public String getName() {return "gus.image.iconstoimage";}
public String getCreationDate() {return "2011.06.18";}
public Object transform(Object obj) throws Exception
{
if(obj==null) return null;
if(obj instanceof Icon[]) return iconsToImage((Icon[])obj);
if(obj instanceof Icon) return iconToImage((Icon)obj);
throw new Exception("Invalid data type: "+obj.getClass().getName());
}
private BufferedImage createImage(int w, int h)
{
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
return gc.createCompatibleImage(w,h,Transparency.BITMASK);
}
private Image iconToImage(Icon icon)
{
if(icon instanceof ImageIcon) return ((ImageIcon)icon).getImage();
int w = icon.getIconWidth();
int h = icon.getIconHeight();
BufferedImage image = createImage(w,h);
Graphics2D g = image.createGraphics();
icon.paintIcon(null,g,0,0);
g.dispose();
return image;
}
private Image iconsToImage(Icon[] icons)
{
int w = 0;
int h = 0;
for(int i=0;i<icons.length;i++)
{
w = Math.max(w,icons[i].getIconWidth());
h = Math.max(h,icons[i].getIconHeight());
}
BufferedImage image = createImage(w,h);
Graphics2D g = image.createGraphics();
for(int i=0;i<icons.length;i++)
icons[i].paintIcon(null,g,0,0);
g.dispose();
return image;
}
}
Sujets similaires
» Transformer un objet Icon en Image
» 2 manières pour transformer vos JComponent en image
» Parser un fichier csv ou txt pour obtenir un tableau
» Lire une image BMP
» Lire une image JPEG
» 2 manières pour transformer vos JComponent en image
» Parser un fichier csv ou txt pour obtenir un tableau
» Lire une image BMP
» Lire une image JPEG
Projet gus05 de développement Java :: Chantiers :: Chantiers graphiques :: Manipuler les objets Icon
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Mar 16 Sep - 12:01 par Gus
» Présentation du jeu Vindinium
Jeu 20 Fév - 15:32 par Gus
» Rechercher la cible la plus proche avec le "Breadth First Search"
Jeu 20 Fév - 13:06 par Gus
» Impression d'écran avec sélection de zone
Jeu 20 Fév - 12:12 par Gus
» Envoyer un mail par un compte Gmail
Jeu 25 Avr - 14:04 par Gus
» Streaming : comment télécharger les vidéos
Lun 4 Fév - 19:59 par Gus
» Synology : installer ipkg
Mar 22 Jan - 21:22 par Gus
» Trouver le type de lecteur avec JNA
Mer 9 Jan - 23:11 par Gus
» Adresse ip publique et adresse ip privée, Internet box et UPnP
Mer 9 Jan - 21:02 par Gus
» Accéder au numéro de série du lecteur par un script vb
Mer 9 Jan - 19:31 par Gus