Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Java] BufferedImage

    Buonasera a tutti!
    Ho creato una classe per visualizzare un immagine, ma ho alcuni problemi durante il funzionamento...
    Lo scopo della classe (per ora) è ricevere tramite il costruttore il percorso dell'immagine da visualizzare e visualizzarla a schermo. Un lavoro del genere mi funzionava bene estendendo JLabel usando una ImageIcon, ma ora devo fare qualche operazione in più...

    L'immagine dovrebbe essere caricata in una BufferedImage (imageOriginal), trasformata in qualche modo (con l'unico pezzo di codice che funziona) e il risultato (che credo sia una nuova BufferedImage) deve essere visualizzato sullo schermo.
    Mi è stato consigliato di scrivere direttamente sul JPanel attraverso il metodo paint(), ma non funziona nulla... come mai?
    Cosa e dove ho sbagliato?
    Ci sono modi più furbi per risolvere questo problema?

    codice:
    package image;
    
    import java.awt.image.BufferedImage;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    
    import javax.swing.JPanel;
    import javax.swing.ImageIcon;
    
    public class ImagePanel extends JPanel {
    
    	private BufferedImage imageOriginal;
    	private BufferedImage imageCropped;
    	
    	public ImagePanel(String imagePath) {
    		super();
    		ImageIcon icon = new ImageIcon(imagePath);
    		Image image = icon.getImage();
    		imageOriginal = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
    		Graphics2D g2Original = imageOriginal.createGraphics();
    		g2Original.drawImage(image, icon.getIconWidth(), icon.getIconHeight(), this);
    		imageCropped = imageOriginal;
    		this.repaint();
    	}
    	
    	public void paint(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g;
    		g2.drawImage(imageCropped, null, imageCropped.getWidth(), imageCropped.getHeight());
    	}
    
    }
    Windows 7 x64 + Ubuntu Linux 10.10 (Default)
    In principio era il C...
    C/C++ & C# & JavaSE/EE Developer

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    class ImagePanel extends JPanel {
      ImageIcon icon;
    
            public ImagePanel(String imagePath) {
                    super();
                   icon = new ImageIcon(imagePath);
            }
            
            public void paintComponent(Graphics g) {
              g.drawImage(icon.getImage(), 0, 0, icon.getIconWidth(), icon.getIconHeight(), this);
            }
    
    }
    Questo è ridotto all'osso, puoi benissimo passare qualunque immagine valida a g.drawImage.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Il mio problema cruciale è fare il seguente passaggio:
    Immagine da file -> BufferedImage -> BufferedImage -> Disegno su JPanel
    Il codice riportato funziona perfettamente, ma non mi passa attraverso la BufferedImage, cosa fondamentale...
    Windows 7 x64 + Ubuntu Linux 10.10 (Default)
    In principio era il C...
    C/C++ & C# & JavaSE/EE Developer

  4. #4
    Nessuna idea?
    Windows 7 x64 + Ubuntu Linux 10.10 (Default)
    In principio era il C...
    C/C++ & C# & JavaSE/EE Developer

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Beh... se hai a disposizione l'oggetto BufferedImage (che sinceramente non sono mai riuscito a ottenere se non attraverso l'utilizzo di una libreria della Sun scaricabile separatamente), basta modificare un attimo il costruttore del pannello di Andrea1979:
    codice:
    class ImagePanel extends JPanel {
       Image img;
    
       public ImagePanel(BufferedImage img) {
          super();
          this.img = img;
       }
            
       public void paintComponent(Graphics g) {
         g.drawImage(img, 0, 0, img.getWidth(this), img.getHeight(this), this);
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.