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

    Lavorare con immagini con Swing

    Ciao a tutti,

    sto cercando di capire come lavorare conle immagini in Java ma lo sto trovando complesso da capire. Tutti gli esempi che ho visto in giro si rifanno ad un paintComponent. Ma facendo così applico un immagine predefinita alla creazione dell'oggetto, non capisco come rendere la cosa dinamica, tipo alla chiusura di un file open dialog....

    spero di essere stato abbastanza chiaro...

    grazie e tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nmontec Visualizza il messaggio
    sto cercando di capire come lavorare conle immagini in Java ma lo sto trovando complesso da capire. Tutti gli esempi che ho visto in giro si rifanno ad un paintComponent. Ma facendo così applico un immagine predefinita alla creazione dell'oggetto, non capisco come rendere la cosa dinamica, tipo alla chiusura di un file open dialog....

    spero di essere stato abbastanza chiaro...
    No, purtroppo non è molto chiaro quale è il tuo problema o dubbio esatto. Un conto è il caricamento di una immagine da file/stream/risorsa nei formati standard es. gif/jpeg/png, un altro conto è usare una immagine come "icona" nei componenti che gestiscono degli Icon (principalmente menù, pulsanti, label), un altro conto ancora è sfruttare il custom painting per disegnare immagini o qualunque altra cosa (linee, figure ecc...) sulla superficie di un componente custom (appunto il paintComponent in Swing) e un altro conto ulteriore è la creazione e/o manipolazione di immagini.
    Quindi su quali di questi aspetti sono i tuoi dubbi?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, purtroppo non è molto chiaro quale è il tuo problema o dubbio esatto. Un conto è il caricamento di una immagine da file/stream/risorsa nei formati standard es. gif/jpeg/png, un altro conto è usare una immagine come "icona" nei componenti che gestiscono degli Icon (principalmente menù, pulsanti, label), un altro conto ancora è sfruttare il custom painting per disegnare immagini o qualunque altra cosa (linee, figure ecc...) sulla superficie di un componente custom (appunto il paintComponent in Swing) e un altro conto ulteriore è la creazione e/o manipolazione di immagini.
    Quindi su quali di questi aspetti sono i tuoi dubbi?
    Apparentemente su nessuno dei tre, nel senso che io ho creato un'immagine in un Raster e non capisco come fare a visualizzarla in un JPanel, ed anche a cambiare immagine alla bisogna (tipo il classico comando File->Open)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nmontec Visualizza il messaggio
    Apparentemente su nessuno dei tre
    Io ne ho detti 4 di aspetti.

    Quote Originariamente inviata da nmontec Visualizza il messaggio
    nel senso che io ho creato un'immagine in un Raster
    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.

    Quote Originariamente inviata da nmontec Visualizza il messaggio
    e non capisco come fare a visualizzarla in un JPanel
    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.

    Quote Originariamente inviata da nmontec Visualizza il messaggio
    ed anche a cambiare immagine alla bisogna (tipo il classico comando File->Open)
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nmontec Visualizza il messaggio
    Intendo proprio la classe Raster in quanto creo immagini a partire da matrici
    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?

    Quote Originariamente inviata da nmontec Visualizza il messaggio
    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
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Hai guardato BufferedImage?
    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.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nmontec Visualizza il messaggio
    ma BufferedImage è formato da un oggetto Raster e da un ColorModel.
    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.

    Quote Originariamente inviata da nmontec Visualizza il messaggio
    Ora, io ho creato il BufferedImage, ma non riesco a capire come utilizzarlo per visualizzare la foto su un JPanel.
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    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.
    D'accordo, ma in ogni caso questo BufferedImage dovrò riempirlo prima o poi . 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

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da nmontec Visualizza il messaggio
    ma in ogni caso questo BufferedImage dovrò riempirlo prima o poi .
    Puoi leggere/settare singoli pixel o blocchi di pixel (vedi i getRGB/setRGB) oppure puoi ottenere un Graphics/Graphics2D e disegnare sulla immagine usando tutta la sofisticata API di Graphics(2D).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.