2009-06-17 20 views
10

Ho caricato un'immagine jpg in cui voglio disegnare lettere e cerchi, data una coordinata x, y.Come posso modificare un'immagine jpg tramite Java?

Ho cercato di capire il paintIcon del ImageIcon classe

public void paintIcon(Component c, 
         Graphics g, 
         int x, 
         int y) 

Questo metodo mi permette di modificare le immagini jpg il modo in cui voglio? Quali sono i parametri parametrici di Component c e Graphics? Cosa aggiungerei al suo corpo per dipingere cerchi o lettere?

Sto lavorando su Netbeans 6.5, ho qualcosa di incorporato per questa attività (invece di ImageIcon)?

risposta

15

Il-Java pura modo è quello di utilizzare ImageIO-load l'immagine come BufferedImage. Quindi è possibile chiamare createGraphics() per ottenere un oggetto Graphics2D; puoi quindi disegnare ciò che vuoi sull'immagine.

È possibile utilizzare un ImageIcon incorporato in un JLabel per fare la visualizzazione, e si può aggiungere un MouseListener e/o un MouseMotionListener al JLabel se si sta cercando di consentire all'utente di modificare l'immagine.

5

Utilizzare una libreria per fare proprio questo. Uno che potresti provare è JMagick.

1

È possibile utilizzare questo metodo per sovrapporre gli elementi di cui si ha bisogno ogni volta che l'immagine viene disegnata nell'interfaccia utente (ciò accadrebbe numerose volte poiché non si sta disegnando autonomamente i dati dell'immagine) ma potrebbe essere adatta al proprio scopi (e vantaggioso se l'overlay cambia nel tempo).

Qualcosa di simile:

new ImageIcon("someUrl.png"){ 
    public void paintIcon(Component c, Graphics g, int x, int y) { 
     super(c, g, x, y); 
     g.translate(x, y); 

     g.drawOval(0, 0, 10, 10); 
     ... 

     g.translate(-x, -y); 
    } 
}; 

Detto questo, la risposta mmyers' è molto meglio se si desidera modificare i dati di immagine.

9

La manipolazione delle immagini in Java può essere ottenuta utilizzando i contesti Graphics o Graphics2D.

È possibile caricare immagini come JPEG e PNG utilizzando la classe ImageIO. Il metodo ImageIO.read accetta un File da leggere e restituisce un valore BufferedImage, che può essere utilizzato per manipolare l'immagine tramite il relativo contesto Graphics2D (o Graphics, la sua superclasse).

Il contesto Graphics2D può essere utilizzato per eseguire molte attività di disegno e manipolazione delle immagini. Per informazioni ed esempi, il Trail: 2D Graphics di The Java Tutorials sarebbe un ottimo inizio.

che segue è un esempio semplificato (non testata) che aprirà un file JPEG, e trarre alcune cerchi e linee (le eccezioni sono ignorati):

// Open a JPEG file, load into a BufferedImage. 
BufferedImage img = ImageIO.read(new File("image.jpg")); 

// Obtain the Graphics2D context associated with the BufferedImage. 
Graphics2D g = img.createGraphics(); 

// Draw on the BufferedImage via the graphics context. 
int x = 10; 
int y = 10; 
int width = 10; 
int height = 10; 
g.drawOval(x, y, width, height); 

g.drawLine(0, 0, 50, 50); 

// Clean up -- dispose the graphics context that was created. 
g.dispose(); 

Il codice di cui sopra si aprirà un'immagine JPEG, e disegnare un ovale e una linea.Una volta eseguite queste operazioni per manipolare l'immagine, è possibile gestire BufferedImage come qualsiasi altro Image, in quanto è una sottoclasse di Image.

Ad esempio, creando un ImageIcon usando l'BufferedImage, si può incorporare l'immagine in un JButton o JLabel:

JLabel l = new JLabel("Label with image", new ImageIcon(img)); 
JButton b = new JButton("Button with image", new ImageIcon(img)); 

Il JLabel e JButton entrambi hanno costruttori che prendono in ImageIcon, in modo che possa essere un modo semplice per aggiungere un'immagine a un componente Swing.

Problemi correlati