2009-06-17 30 views
10

He cargado una imagen jpg en la que quiero dibujar letras y círculos, con una coordenada x, y.¿Cómo puedo editar una imagen jpg a través de Java?

He estado tratando de averiguar la paintIcon de la clase ImageIcon

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

¿Este método me permite editar imágenes jpg de la forma que yo quiero? ¿Qué se supone que son los Component c y Graphics g paramethers? ¿Qué agregaría a su cuerpo para pintar círculos o letras?

Estoy trabajando en Netbeans 6.5, ¿tengo algo incorporado para esta tarea (en lugar de ImageIcon)?

Respuesta

15

El Java pura forma es utilizar ImageIO a load la imagen como un BufferedImage. Luego puede llamar al createGraphics() para obtener un objeto Graphics2D; a continuación, puede dibujar lo que quieras en la imagen.

puede utilizar un ImageIcon incrustado en un JLabel para hacer la muestra, y se puede añadir un MouseListener y/o una MouseMotionListener a la JLabel si usted está tratando de permitir al usuario editar la imagen.

5

Utilice una biblioteca para hacer precisamente eso. Uno que puede probar es JMagick.

1

i imagen se puede utilizar este método para superponer los elementos que necesita cada vez que la imagen se dibuja en la interfaz de usuario (esto sucedería en numerosas ocasiones ya que no están recurriendo a los datos de imagen de su auto), pero puede ser adecuado para su fines (y ventajoso si la superposición cambia con el tiempo).

Algo así como:

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); 
    } 
}; 

Una vez dicho esto, la respuesta mmyers' es mucho mejor si desea modificar los datos de la imagen.

9

La manipulación de imágenes en Java se puede lograr utilizando los contextos Graphics o Graphics2D.

Cargando imágenes como JPEG y PNG se puede realizar utilizando la clase ImageIO. El método ImageIO.read tiene un File para leer y devuelve un BufferedImage, que se puede utilizar para manipular la imagen a través de su contexto Graphics2D (o el Graphics, su superclase).

El contexto Graphics2D se puede utilizar para realizar muchas tareas de dibujo y manipulación de imágenes. Para obtener información y ejemplos, el Trail: 2D Graphics de The Java Tutorials sería un muy buen comienzo.

es un ejemplo simplificado (no probado) que abrirá un archivo JPEG, y dibujar algunos círculos y líneas (las excepciones son ignorados) siguiente:

// 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(); 

El código anterior se abrirá una imagen JPEG, y dibujar una oval y una línea.Una vez que se realizan estas operaciones para manipular la imagen, el BufferedImage se puede manejar como cualquier otro Image, ya que es una subclase de Image.

Por ejemplo, mediante la creación de un ImageIcon usando el BufferedImage, se puede incrustar la imagen en un JButton o JLabel:

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

El JLabel y JButton tanto tienen constructores que toman en un ImageIcon, de modo que puede haber una manera fácil de agregar una imagen a un componente Swing.

Cuestiones relacionadas