Usare BufferedImage

di il
15 risposte

Usare BufferedImage

Salve,
dovrei creare un'applicazione desktop che mi permetta di caricare un'immagine da file ed applicare una serie di filtri come scala di grigio e simili, dovrei inoltre eseguire delle operazioni logiche su immagini, non so se c'è qualche libreria che potrebbe fare al caso mio, potreste aiutarmi? Le immagini che carico sono oggetti di tipo BufferedImage non ho però trovato nessun metodo che mi permetta di fare operazioni logiche.
Grazie

15 Risposte

  • Re: Usare BufferedImage

    MariaMaria ha scritto:


    Salve,
    dovrei creare un'applicazione desktop che mi permetta di caricare un'immagine da file ed applicare una serie di filtri come scala di grigio e simili, dovrei inoltre eseguire delle operazioni logiche su immagini, non so se c'è qualche libreria che potrebbe fare al caso mio, potreste aiutarmi? Le immagini che carico sono oggetti di tipo BufferedImage non ho però trovato nessun metodo che mi permetta di fare operazioni logiche.
    Grazie
    È sicuramente possibile che esistano librerie Java esterne per effettuare analisi e/o modifiche anche molto complesse su immagini. Io però non ne conosco, né ne ho mai usate.

    A livello del framework standard di Java SE, se hai un generico Image (quindi anche BufferedImage) puoi comunque fare un buon numero di cose: sia filtri di colore su ciascun pixel in modo indipendente, sia filtri di "convoluzione".

    Per quanto riguarda i filtri di colore c'è un mio bel esempio "RGB Image Filters" tra i miei nuovi Java Examples. Spero possa esserti di aiuto!

    Esempi con filtri di convoluzione non ne ho ancora fatti ...
  • Re: Usare BufferedImage

    Grazie andbin,
    esempio interessante!
  • Re: Usare BufferedImage

    Una buona/ottima libreria e' ImageMagick:



    ed il suo wrapper in Java JMagick

    http://sourceforge.net/apps/mediawiki/jmagick/index.php?title=Main_Page

    Forse un po' ostiche per chi e' alle prime armi.

    Alternative:

    ImageJ



    La libreria standard di java non mette a disposizione grandi elaborazioni.

    Implementare i filtri direttamente in Java, per immagini di una certa dimensione, non e' molto efficiente, a meno di non passare a Java8 con il nuovo supporto alle operazioni vettoriali.

    Generalmente quello che si fa e' usare una libreria Java per la lettura dell'immagine, implementare i filtri in C e richiamarli da Java

    Comunque di libreria per l'elaborazione delle immagini per Java su Internet ne trovi un bel po'
  • Re: Usare BufferedImage

    Grazie migliorabile,
    scusami per l'ignoranza ma ImageJ non è un software già pronto per gestire immagini? come faccio ad integrarlo nella mia applicazione MVC?
    In merito ad ImageMagic, è complicata come OpenCV? perchè cercando in rete mi appariva OpenCV come libreria utile, ho provato anche ad installarla ma non ci sono riuscita, avevo visto anche JAI, ma credo sia un pò vecchia come libreria e quindi forse non compatibile con le nuove versioni di java.
    Grazie
  • Re: Usare BufferedImage

    Scusami andbin,
    guardando il tuo codice in alcuni metodi come questo
    public int filterRGB(int x, int y, int rgb)
    gli passi i valori di x, y ed rgb, ma materialmente dove li torvo questi valori?
    Grazie e scusami per la poca competenza
  • Re: Usare BufferedImage

    MariaMaria ha scritto:


    Scusami andbin,
    guardando il tuo codice in alcuni metodi come questo
    public int filterRGB(int x, int y, int rgb)
    gli passi i valori di x, y ed rgb, ma materialmente dove li torvo questi valori?
    Grazie e scusami per la poca competenza
    È il framework (tramite FilteredImageSource, nel mio esempio) che invoca il filterRGB sulla implementazione del filtro passando di volta in volta ognuno dei pixel.
  • Re: Usare BufferedImage

    Grazie andbin,
    ho creato un nuovo progetto inserendo il tuo codice, per capire meglio i vari input, solo che adesso ho un bel NullpointerException nel momento in cui cerco di caricare il file, che esiste da qualche parte sul mio computer, come posso risolvere l'eccezione?
    Grazie ancora
  • Re: Usare BufferedImage

    MariaMaria ha scritto:


    ho creato un nuovo progetto inserendo il tuo codice, per capire meglio i vari input, solo che adesso ho un bel NullpointerException nel momento in cui cerco di caricare il file
    Senza vedere cosa hai scritto ... è un pelino difficile dire cosa non va ...
    O posti del codice o almeno descrivi a parole, dove è localizzato fisicamente il file e come componi/determini il nome del file e come lo leggi (cioè con quale API del framework).
  • Re: Usare BufferedImage

    Grazie per la disponibilità,
    praticamente ho creato una cartella "varie" che contiene le immagini ed ho inserito il percorso in questo modo:
    URL imageUrl = RGBImageFiltersTestFrame.class.getResource("varie\\foto1.jpg");
    solo che eseguendo il tutto ottengo
    Uncaught error fetching image:
    java.lang.NullPointerException
    	at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115)
    Grazie in anticipo!
  • Re: Usare BufferedImage

    MariaMaria ha scritto:


    URL imageUrl = RGBImageFiltersTestFrame.class.getResource("varie\\foto1.jpg");
    Innanzitutto la specifica sopra non è realmente sul file-system. Quindi non usare \\ (che è '\') ma usa solo /.

    Se usi "varie/foto1.jpg", questa specifica è relativa ma non è relativa alla directory "corrente" .... è relativa al package di RGBImageFiltersTestFrame.
    In sostanza la risorsa viene cercata lungo il "classpath" e la cartella "varie" deve essere nello stesso package della classe RGBImageFiltersTestFrame.
  • Re: Usare BufferedImage

    Grazie andbin,
    ho messo la cartella varie allo stesso livello della cartella src che contiene RGBImageFiltersTestFrame, ho modificato \\ con / ma continuo ad ottenere il Nullpointer.
    Nel dubbio che la cartella dovesse essere posizionata all'interno di src ho fatto anche questa prova ma l'eccezione non scompare, dove sbaglio?
    Grazie
  • Re: Usare BufferedImage

    MariaMaria ha scritto:


    ho messo la cartella varie allo stesso livello della cartella src che contiene RGBImageFiltersTestFrame
    La cartella "varie" deve essere nella stessa cartella dove hai RGBImageFiltersTestFrame.java .... non nella stessa cartella dove c'è la "src".
  • Re: Usare BufferedImage

    Attualmente la cartella si trova in src dove è presente il file java che contiene l'URL.
    Non riesco a capire dove sbaglio, oppure devo mettere il percorso assoluto?
    Grazie
  • Re: Usare BufferedImage

    MariaMaria ha scritto:


    Attualmente la cartella si trova in src dove è presente il file java che contiene l'URL.
    Non riesco a capire dove sbaglio, oppure devo mettere il percorso assoluto?
    La fase di build del progetto come la stai facendo? A "mano" da prompt dei comandi con i tools del JDK? Da un IDE? (quale?) O usando tools come Ant o Maven (che sono usabili anche da un IDE)?

    Quello che è importante è che la cartella "varie" alla fine della fase di build vada a finire nella stessa cartella dove hai il compilato, ovvero RGBImageFiltersTestFrame.class.

    Cioè è il processo di build che dovrebbe "ribaltare" le risorse presenti in src portandole nel punto dove ci sono i compilati. Ma come/dove viene fatto dipende appunto da come si fa il build ...


    P.S. la specifica che hai usato "varie/foto1.jpg" non è un URL in senso "stretto".
Devi accedere o registrarti per scrivere nel forum
15 risposte