PDA

View Full Version : [Java] Inserire una linea in un immagine


Sint
20-04-2006, 23:40
Il mio problema è il seguente:
ho un immagine gif che devo modificare inserendo delle perturbazioni standard decise da me come ad esempio una linea oppure un quadratino o un cerchietto, insomma cose di questo genere, e salvare infine l'immagine modificata in un nuovo file. La cosa più logica mi sembrava estrarre il Graphics dall' Image e poi usare quest'ultima che forniva metodi come drawLines(...) oppure drawRect(...) che costruivano, appunto, linee e rettangoli ma poi mi sono scontrato con il problema di costruire un image (da salvare poi in gif) a partire dal Graphics. Avevo pensato anche di estrarre tutti i pixel attraverso la classe PixelGrabber e modificare poi i singoli pixel ma per fare una linea in diagonale è una cosa abbastanza complicata andarea a trovare i pixel giusti. Potete aiutarmi??? Avete qualche idea??? Grazie per il vostro aiuto

PGI-Bis
20-04-2006, 23:57
PixelGrabber è lì per retrocompatibilità ma il suo scopo è stato rimpiazzato dai vari strumenti presenti nel package java.awt.image.

Comunque, l'idea del Graphics è corretta. Scrivendo:

Graphics g = image.getGraphics();
g.setColor(Color.BLACK);
g.drawLine(10, 10, 20, 20);

quella linea è disegnata sulla superficie image. Salvando quell'image ottieni l'immagine "originale" con la sua linea nera.

L'unica magagna è che manca, nelle classi standard, il plug-in per salvare in formato "gif". Credo che curiosando in rete si riesca comunque a trovare uno strumento ad hoc.

Sint
21-04-2006, 01:55
Questo è il mio pezzo di codice:

ImageIcon immagineIco = new ImageIcon(file);
Image immagine = immagineIco.getImage();
Graphics g = immagine.getGraphics();
g.setColor(Color.BLACK);
g.drawLine(10, 10, 20, 20);

dove file è una stringa che indica il percorso dell'immagine, e questa è l'eccezione:

Exception in thread "main" java.lang.IllegalAccessError: getGraphics() only valid for images created with createImage(w, h).

COme faccio???

PGI-Bis
21-04-2006, 13:23
Così:

BufferedImage image = ImageIO.read(file);

Oppure:

ImageIcon icon = new ImageIcon(file);
BufferedImage image = new BufferedImage(
icon.getIconWidth(),
icon.getIconHeight(),
BufferedImage.TYPE_INT_ARGB);
image.getGraphics().drawImage(icon.getImage(), 0, 0, null);

Non ricordo se ImageIO abbia il lettore per il formato gif. In caso non l'abbia, usi il secondo approccio (copi un image in un BufferedImage).

Sint
22-04-2006, 20:12
Grazie mille... funziona!!!!! :sbonk: :sbonk: Adesso è rimasto solo il problema di salvare l'immagine modificata in formato Gif ma spero di non trovare grossi problemi per farlo!! Ti voglio proprio bene... grazie ancora!!! :D:D:D:D