Io ne ho detti 4 di aspetti.
Che intendi con "raster"? Nel senso generale di "immagine raster" che consiste in una griglia di pixel (concetto contrapposto alle immagini "vettoriali")?
O intendi proprio java.awt.image.Raster? Un Raster è solo la rappresentazione di un'area rettangolare di pixel e che contiene un DataBuffer con i pixel in un determinato formato. Raster è solo una struttura dati interna, non è una immagine come intesa dal framework.
Le immagini in Java (perlomeno in Java SE) sono rappresentate da java.awt.Image e sotto-tipi.
Se vuoi solo far vedere una immagine, il modo più semplice è:
- creare un ImageIcon, direttamente (da file/URL) o da un Image già esistente.
- assegnare il ImageIcon ad un JLabel.
- inserire JLabel in un contenitore: il content pane di JFrame, un JPanel specifico, ecc....
Non servirebbe di certo il custom painting solo per questo.
Questo è appunto il primo aspetto che dicevo "il caricamento di una immagine da file/stream/risorsa nei formati standard es. gif/jpeg/png".
Se usi JFileChooser (da un classico menù File->Apri) per far scegliere un file immagine, JFileChooser ti fornisce solo il pathname del file e basta, non "apre" o carica un bel niente.
Come usare il pathname spetta a te. Se è una immagine, allora può essere caricata tramite diverse API del framework per ottenere un Image o BufferedImage (a seconda della classe/metodo usato).
C'è il toolkit di AWT (java.awt.Toolkit), c'è la API ImageIO (javax.imageio.ImageIO) e c'è javax.swing.ImageIcon che è la principale implementazione di Icon.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Intendo proprio la classe Raster in quanto creo immagini a partire da matrici e poi le devo visualizzare.inoltre ho bisogno di modificare l'immagine e quindi ho bisogno anche che l'operazione di visualizzazione sul jpanel sia pure veloce
Quel Raster non dovrebbe neanche interessarti, visto che il suo uso è una cosa abbastanza "avanzata".
E ti ho anche ampiamente detto che in Java SE una immagine è solo rappresentata da java.awt.Image e sotto-tipi. Hai guardato BufferedImage?
La visualizzazione di un (Buffered)Image a livello "basilare" è banale l'ho detta prima: (Buffered)Image -> ImageIcon -> JLabel.
Ma se devi modificare frequentemente la immagine e rivisualizzarla oppure addirittura è l'utente che deve poter "disegnare" tramite tastiera/mouse sulla immagine, allora no, conviene usare il custom painting. E riguardo ottimizzazioni, performance e quant'altro, sono tutte cose che dovrai comprendere man mano che acquisisci i concetti sul painting in Swing. Non sono cose che posso spiegarti in poche righe!
Cerca di vedere i vari aspetti singolarmente e in modo progressivo. Mi sembra che stai facendo un po' un miscuglio ...
Se hai dubbi più precisi, chiedi pure, magari preferibilmente in discussioni separate.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Si è proprio quello che sto cercando di utilizzare, ma BufferedImage è formato da un oggetto Raster e da un ColorModel. Ora, io ho creato il BufferedImage, ma non riesco a capire come utilizzarlo per visualizzare la foto su un JPanel.Hai guardato BufferedImage?
Ma potresti anche ignorare questi aspetti. Un BufferedImage molto spesso lo si crea con il costruttore:
public BufferedImage(int width, int height, int imageType)
per cui alla fin fine ti basta specificare la dimensione e il tipo. I tipi più frequentemente utilizzati sono TYPE_INT_RGB oppure con canale alpha TYPE_INT_ARGB.
Il caso basilare l'ho già detto: l'uso di ImageIcon+JLabel. Ma questo va bene più che altro per immagini statiche o comunque che cambiano poco o dopo molto tempo.
Se vuoi avere più controllo, anche su coordinate, rotazione, ecc... della immagine, allora serve il custom painting: si estende tipicamente JPanel o JComponent (ci sono alcune differenze tecniche tra i due ma per cose del genere è sufficiente JPanel) e si ridefinisce (override) paintComponent(Graphics) e si disegna quello che si vuole, la immagine, sul Graphics.
Di esempi sul custom painting ne trovi a tonnellate .. anche tra i miei Java Examples.![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
D'accordo, ma in ogni caso questo BufferedImage dovrò riempirlo prima o poiMa potresti anche ignorare questi aspetti. Un BufferedImage molto spesso lo si crea con il costruttore:
public BufferedImage(int width, int height, int imageType)
per cui alla fin fine ti basta specificare la dimensione e il tipo. I tipi più frequentemente utilizzati sono TYPE_INT_RGB oppure con canale alpha TYPE_INT_ARGB.. Però se proprio devo estendere il JPanel con il Paint darò un'occhiata ai tuoi esempi
Per intanto grazie, se continuo a non riuscirci, ci risentiremo qui![]()