Newsgroup: it.comp.java
Titolo: Ridimensionare immagini.

Salve a tutti. Ho un questi "stupido" ma che non riesco a risolvere...
Dovrei caricare un'immagine all'interno di una jLabel ma non riesco a 
caricarla ridimensionata. Ho creato questa classe:
import javax.swing.Icon;
import javax.swing.ImageIcon;
public class GestImmagini {
     //costruttore
     public GestImmagini(final String file) {
         this.path = "C:\\Documents and Settings\\andrea\\Desktop\\";
         this.nomeFile = path + file.toString();
         this.icon = new ImageIcon(nomeFile);
         this.w = icon.getIconWidth();
         this.h = icon.getIconHeight();
     }
     //Dimezza la dimensione dell'immagine
     public void meta() {
         this.w /= 2;
         this.h /= 2;
     }
     //Raddoppia la dimensione dell'immagine
     public void raddoppia() {
         this.w *= 2;
         this.h *= 2;
     }
     //ritorna larghezza immagine
     //@return larghezza immagine
     public float getLarghezza() {
         return this.w;
     }
     //ritorna altezza immagine
     //@return altezza immagine
     public float getAltezza() {
         return this.h;
     }
     //ritorna il path + il nome del file
     //@return nome del file con percorso
     public String getFile() {
         return this.nomeFile;
     }
     //ritorna il tipo icon
     //return immagine
     public Icon getIcona() {
         return this.icon;
     }
     private String path;
     private String nomeFile;
     private Icon icon;
     private int w;    //larghezza
     private int h;    //altezza
}//fine classe
Poi nel main, tralasciando il resto ho inserito queste istruzioni (label 
è di tipo jLabel):
     GestImmagini aa = new GestImmagini("NB-logo-single.jpg");
     etichetta.setIcon(aa.getIcona());
     System.out.println(aa.getLarghezza() + " " + aa.getAltezza());
     //dimezzo l'immagine
     aa.meta();
     System.out.println(aa.getLarghezza() + " " + aa.getAltezza());
     etichetta.setIcon(aa.getIcona());
     etichetta.setVisible(true);
I nuovi dati vengono stampati correttamente (quindi il ridimensionamento 
avviene), ma l'immagine caricata nella label (etichetta) è sempre delle 
dimensioni originali.
Come posso fare??
Grazie,
Andrea

 dimensioni originali.
Per forza. Devi agire su this.icon non sulle i campi w, e h di GestImmagini.
-- 
Andrea Francia
http://www.andreafrancia.it/

Andrea Francia ha scritto:

Ci sono saltato fuori un questo modo, anche se la soluzione sembra un 
po' "articolata":
public class GestImmagini {
     //costruttore principale
     //Accetta come argomento il nome del file SENZA percorso
     public GestImmagini(final String file) {
         this.path = "C:\\Documents and Settings\\andrea\\Desktop\\";
         this.nomeFile = path + file.toString();
         this.i = java.awt.Toolkit.getDefaultToolkit().getImage(nomeFile);
         this.icon = new ImageIcon(i);
         this.w = icon.getIconWidth();
         this.h = icon.getIconHeight();
     }
     //Dimezza la dimensione dell'immagine
     public void dimezza() {
         this.w /= 2;
         this.h /= 2;
     }
     //Raddoppia la dimensione dell'immagine
     public void raddoppia() {
         this.w *= 2;
         this.h *= 2;
     }
     //ritorna larghezza immagine
     //@return larghezza immagine
     public float getLarghezza() {
         return this.w;
     }
     //ritorna altezza immagine
     //@return altezza immagine
     public float getAltezza() {
         return this.h;
     }
     //ritorna il nome del file (incluso di percorso)
     //@return nome del file con percorso
     public String getFile() {
         return this.nomeFile;
     }
     //ritorna il tipo icon con le modifiche
     //@return immagine modificata
     public Icon getIcona() {
         return this.icon = new ImageIcon(getImage());
     }
     //ritorna il tipo icon
     //@return immagine
     public Image getImage() {
         return this.i = i.getScaledInstance(this.w, this.h, 
Image.SCALE_DEFAULT);
     }
     private String path;    //percorso file
     private String nomeFile;//percorso + nome del file
     private Icon icon;
     private Image i;
     private int w;    //larghezza
     private int h;    //altezza
}//fine classe
Nel main:
     GestImmagini aa = new GestImmagini("NB-logo-single.jpg");
     //dimezzo l'immagine
     aa.dimezza();
     etichetta.setIcon(aa.getIcona());
     etichetta.setVisible(true);
Così funziona tutto....