Projet gus05 de développement Java
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

Transformer un tableau Icon[] en Image

Aller en bas

Transformer un tableau Icon[] en Image Empty Transformer un tableau Icon[] en Image

Message  Gus Sam 18 Juin - 19:19

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é.
Transformer un tableau Icon[] en Image Compta_image1

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.
Transformer un tableau Icon[] en Image Compta_image2

Sympa, non ? Cool
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;
   }
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum