Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-09-2011, 13:56   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[Java] Visualizzare un'immagine e poi applicargli un filtro

Salve ragazzi,
premetto che stò chiedendo 2 cose diverse in questo 3d...la prima domanda è sicuramente più facile e molti di voi mi sapranno rispondere...per quanto riguarda la seconda spero di trovare qualcuno che abbia già avuto modo di mettere mano all'applicazione di filtri su un'immagine tramite Java.

Seguendo questo articolo (a dire il vero per ora solo la primissima parte dell'articolo): http://www.jhlabs.com/ip/blurring.html stò tentando di fare la seguente cosa:

Una classe che contiene il metodo main che:

1) Visualizza un'immagine JPG (prima domanda su come fare)
2) Ne crea un'altra applicando un filtro blurring all'immagine iniziale (seconda domanda)
3) Visualizza o salva da qualche parte l'immagine modificata

Come detto si tratta di 2 domande...una probabilmetne facile (su come far visualizzare in Java un'immagine...credo tramite Swing) ed un'altra più complicata riguardante l'applicazione del filtro di blurring

Premetto che non ho mai lavorato con Swing ed in generale poco con applicazioni desktop (mi sono occupate principalmente di web application e di mobile application...Android)

Cercando di mettere insieme la primissima parte dell'articolo con dell'altro materiale trovato in rete ho scritto questo pezzo di codice:

Codice:
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;

import javax.swing.ImageIcon;


public class blur1 {
	
	public static void main(String [ ] args){
		
		float[] matrix = new float[400];
		
		for (int i = 0; i < 400; i++)
			matrix[i] = 1.0f/400.0f;

		
		ImageIcon icon = new ImageIcon("/home/andrea/Scrivania/pesce-pagliaccio.jpg");
		Image image = icon.getImage();
		
		BufferedImage imageOriginal = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics2D g2Original = imageOriginal.createGraphics();
		g2Original.drawImage(image, icon.getIconWidth(), icon.getIconHeight(), null);
		
		ImageIcon icon2 = new ImageIcon("/home/andrea/Scrivania/pesce-pagliaccio.jpg");
		Image image2 = icon2.getImage();
		BufferedImage imageDestination = new BufferedImage(icon2.getIconWidth(), icon2.getIconHeight(), BufferedImage.TYPE_INT_RGB);
		
	    BufferedImageOp op = new ConvolveOp( new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null );
	    BufferedImage blurredImage = op.filter(imageOriginal, imageDestination);
	}

}
Di fatto per la prima domanda (come far visualizzare un'immagine ad un'applicazione Java?) dovrebbe bastare questo segmento di codice:

Codice:
ImageIcon icon = new ImageIcon("/home/andrea/Scrivania/pesce-pagliaccio.jpg");
		Image image = icon.getImage();
		
		BufferedImage imageOriginal = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics2D g2Original = imageOriginal.createGraphics();
		g2Original.drawImage(image, icon.getIconWidth(), icon.getIconHeight(), null);
Ma quanto in Eclipse faccio partire il progetto che contiene questo metodo main non viene visualizzato nulla...ne errori nella console ne l'immagine da nessuna parte...come mai? sbaglio qualcosa io?

Per la seconda domanda che è ben più complessa...beh intanto risolviamo questa...poi quella la formulo bene dopo

Tnx
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 15:00   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Andiamo con ordine, partiamo con il caricamento e la visualizzazione di un'immagine.
Ci sarebbero diverse opzioni, io te ne dico una.

Per caricare un'immagine (jpg, png, giff e non mi ricordo se/che altro... ) puoi usare javax.imageio.ImageIO
Ad esempio:
Codice:
File imagePath = new File(strFolderPath, strFileName);
...
Image image = ImageIO.read(file);//could throws IOException
// a ImageIO.read puoi anche passare un InputStream oppure un URL
Avendo per le mani un'Image, puoi istanziare con essa un ImageIcon da usare come icona in un'umilissima JLabel, ad esempio:
Codice:
...
JLabel picture = new JLabel(new ImageIcon(image));
...
A questo punto schiaffi la label dove ti pare, ad esempio dentro uno scroll pane inserito a sua volta in un pannello o in un frame o dove vuoi te:
Codice:
JFrame frame = new JFrame("blablabla");
...
JScrollPane picturePane = new JScrollPane(picture);
picturePane.getVerticalScrollBar().setUnitIncrement(18);
picturePane.getHorizontalScrollBar().setUnitIncrement(18);
...
fame.add(picturePane, BorderLayout.CENTER);
...
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 23-09-2011 alle 15:08.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 17:23   #3
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Ti ringrazio molto...sei stato molto chiaro, credo di aver afferrato i concetti dei menu con Swing ache se non lo conosco come sistema perchè non l'ho mai usato...

Ma continuo ad avere qualche problema...sostanzialmente non mi dà errori e nella console appaiono anche i messaggi dei vari System.out.println inseriti all'interno del mio codice ma...facendo partire il progetto da Eclipse (RUN AS --> JAVA APPLICATION) non viene visualizzata da nessuna parte l'immagine...come mai?

Questo è il mio codice completo:

Codice:
package andrea.blur1.classi;

import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.management.ImmutableDescriptor;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

public class blur1 {
	
	public static void main(String [] args) throws IOException{
		
		String strFolderPath = "/home/andrea/Scrivania/";			// Percorso immagine da aprire
		String strFileName = "pesce-pagliaccio.jpg";				// Nome file immagine da aprire
		
		File imagePath = new File(strFolderPath, strFileName);	
		// Contiene il riferimento al file da aprire
		System.out.println("imagePath punta a: " + imagePath);
		
		Image image = ImageIO.read(imagePath);						// Mette dentro image l'immagine a cui fà riferimento imagePath
		System.out.println("Info immagine: " + image.toString());
		
		JLabel picture = new JLabel(new ImageIcon(image));			// Istanzio un'ImageIcon da image e la uso come icona in una JLabel
		
		JFrame frame = new JFrame("blablabla");						// E' un container
		JScrollPane picturePane = new JScrollPane(picture);			// E' una view scrollabile che contiene la JLabel che ha l'ImageIcon come icona
		System.out.println(picturePane.toString());
		// Setta le scrollbar verticale ed orizzontale:
		picturePane.getVerticalScrollBar().setUnitIncrement(18);
		picturePane.getHorizontalScrollBar().setUnitIncrement(18);
		
		frame.add(picturePane, BorderLayout.CENTER);				// Aggiunco il picturPane al frame esterno e gli dico di posizionarlo al centro
		System.out.println(frame.getComponentCount());
	}

}
Sostanzialmente pare non intopparsi...l'ultimo system.out mi dice che dentro al frame c'è un componente (ed infatti uno ne ho aggiunto...)

ma come mai non si vede da nessuna parte l'immagine? Possibile che dipenda dal fatto che lo lancio in Eclipse? O c'è qualcosa che mi sfugge?

Tnx
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 17:36   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
ma come mai non si vede da nessuna parte l'immagine? Possibile che dipenda dal fatto che lo lancio in Eclipse? O c'è qualcosa che mi sfugge?
Questo percorso relativo:
Codice:
String strFolderPath = "/home/andrea/Scrivania/";
Immagina come viene risolto quando lo lanci da Eclipse piuttosto che da riga di comando. Credo che il problema stia qua
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 18:09   #5
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Questo percorso relativo:
Codice:
String strFolderPath = "/home/andrea/Scrivania/";
Immagina come viene risolto quando lo lanci da Eclipse piuttosto che da riga di comando. Credo che il problema stia qua
mmm temo di non capire cosa intendi :-/
che dovrei fare? come gli dovrei passare il percorso?

Tnx
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2011, 13:10   #6
DarkDrake88
Member
 
Iscritto dal: Jul 2010
Messaggi: 70
Quote:
Originariamente inviato da e-commerce84 Guarda i messaggi
mmm temo di non capire cosa intendi :-/
che dovrei fare? come gli dovrei passare il percorso?

Tnx
Andrea
da riga di comando dovresti passargli tutto l'indirizzo, quindi /home/blablabla

invece, se fai partire da progetto di eclipse, devi mettere l'indirizzo partendo dalla workpath di eclipse.
DarkDrake88 è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2011, 16:44   #7
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da DarkDrake88 Guarda i messaggi
da riga di comando dovresti passargli tutto l'indirizzo, quindi /home/blablabla

invece, se fai partire da progetto di eclipse, devi mettere l'indirizzo partendo dalla workpath di eclipse.
mmm...continua a non funzionare...allora ho fatto la seguente cosa:

tramite Eclipse ho creato una cartella chiamata img allo stesso livello della cartella src

Dentro img ho messo l'immagine: pesce pagliaccio.jpg ed ho cambiato le righe relative all'indirizzo del file nel seguente modo:

Codice:
String strFolderPath = "/blur1/img/";						// Percorso immagine da aprire
		String strFileName = "pesce-pagliaccio.jpg";				// Nome file immagine da aprire
dove blur1 è il nome del progetto ed img è la directory che contienel'immagine...

Il problema ora è che quando lo lancio nella console mi dà il seguente messaggio di errore:

Codice:
imagePath punta a: /blur1/img/pesce-pagliaccio.jpg
Exception in thread "main" javax.imageio.IIOException: Can't read input file!
	at javax.imageio.ImageIO.read(ImageIO.java:1275)
	at andrea.blur1.classi.blur1.main(blur1.java:31)
La prima riga che dice imagePath punta a:.... è il risultato della mi System.out.println che gli fà stampare il riferimento nella variabile imagePath e poi si solleva l'eccezione che dice che non riesce a leggere il file di input...

Non ne riesco ad uscire...sono 2 giorni che ci sbatto la capoccia...qualcuno sà aiutarmi?

Tnx
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2011, 11:25   #8
DarkDrake88
Member
 
Iscritto dal: Jul 2010
Messaggi: 70
La cosa mi pare strana. Hai provato invece di una piattaforma posix di farla girare su Win? E cambiare ovviamente il percorso
DarkDrake88 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2011, 12:19   #9
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da DarkDrake88 Guarda i messaggi
La cosa mi pare strana. Hai provato invece di una piattaforma posix di farla girare su Win? E cambiare ovviamente il percorso
In parte temo di essere un deficiente io perchè avevo rinominato il file pesce-pagliaccio.jpg in pescepagliaccio.jpg...però ancora non funziona....ti spiego ho modificato il codice semplicemente aggiungendo un
Codice:
frame.setVisible(true);
e questa volta appare la casellina con scritto blablabla (che è la stringa passata nella costruzione del JFrame) nella barra delle applicazioni aperte...ma se ci clicko sopra non succede nulla...non mi si apre nulla...

Ora non tira fuori nessuna eccezione relativa al file pescepagliaccio.jpg quindi penso che il file jpg sia caricato correttamente adesso e che l'indirizzo sia giusto (credo...se no tirerebbe fuori l'eccezionel...giusto?)

Per caso bisogna dirgli di visualizzare qualcos'altro? Mi sai aiutare? sarà una cavolata ma non ho mai messo mano alle Swing e ci stò impazzendo...

Per completezza di posto il mio nuovo codice:

Codice:
import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.management.ImmutableDescriptor;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

public class blur1 {
	
	public static void main(String [] args) throws IOException{
		
		String strFolderPath = "/home/andrea/workspace2/blur1/img/";						// Percorso immagine da aprire
		String strFileName = "pesce-pagliaccio.jpg";				// Nome file immagine da aprire
		
		File imagePath = new File(strFolderPath, strFileName);	
		// Contiene il riferimento al file da aprire
		System.out.println("imagePath punta a: " + imagePath);
		
		Image image = ImageIO.read(imagePath);						// Mette dentro image l'immagine a cui fà riferimento imagePath
		System.out.println("Info immagine: " + image.toString());
		
		JLabel picture = new JLabel(new ImageIcon(image));			// Istanzio un'ImageIcon da image e la uso come icona in una JLabel
		
		JFrame frame = new JFrame("blablabla");						// E' un container
		frame.setVisible(true);
		
		JScrollPane picturePane = new JScrollPane(picture);			// E' una view scrollabile che contiene la JLabel che ha l'ImageIcon come icona
		picturePane.setVisible(true);
		
		System.out.println(picturePane.toString());
		// Setta le scrollbar verticale ed orizzontale:
		picturePane.getVerticalScrollBar().setUnitIncrement(18);
		picturePane.getHorizontalScrollBar().setUnitIncrement(18);
		
		frame.getContentPane().add(picturePane, BorderLayout.CENTER);				// Aggiunco il picturPane al frame esterno e gli dico di posizionarlo al centro
		
		System.out.println(frame.getComponentCount());
	}

}
Grazie mille
Andrea
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2011, 17:06   #10
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Risolto da me...il problema era che senza settare le dimensioni del Jframe con un setSize() non si visualizzava...è obbligatorio o usare il setSize() o il pack() (setta le dimensioni del frame con le dimensioni dell'immagine che esso contiene) altrimenti non si vedrà nulla
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2011, 19:02   #11
DarkDrake88
Member
 
Iscritto dal: Jul 2010
Messaggi: 70
Quote:
Originariamente inviato da e-commerce84 Guarda i messaggi
Risolto da me...il problema era che senza settare le dimensioni del Jframe con un setSize() non si visualizzava...è obbligatorio o usare il setSize() o il pack() (setta le dimensioni del frame con le dimensioni dell'immagine che esso contiene) altrimenti non si vedrà nulla
Verissimo, non ci avevo fatto caso che mancava proprio il pack(). E' tanto che non traffico con gli swing eheh!
Meglio così
DarkDrake88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Amazon ci riproverà: l'azienda st...
Apple e Samsung dominano la classifica d...
Un game designer di 9 anni, due fogli a ...
Il weekend Amazon parte col botto: gross...
Amazfit Active 2 scende a 69,99€: i migl...
Smart TV No IVA su Amazon: QLED, Mini-LE...
C'è un TV OLED da 65'' a 900€, ma anche ...
Non solo smartphone: OnePlus sta per lan...
DJI Mavic 4 Pro in super offerta su Amaz...
ASUS Zenbook scende di altri 50€: l'anti...
Un militare francese ha svelato su Strav...
Riceve il reso di una RTX 5090 da 4.000 ...
Gli utenti con GPU Intel non possono gio...
Un agente AI visita 5.000 siti dove un u...
IA, virtualizzazione e cyber resilienza:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v