import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class PicturedPanel
{
private JFrame frame;
private JPanel imagePanel;
private JButton saveButton;
private BufferedImage image;
boolean zeichnen = false;
boolean repaint = false;
private int startX, startY, tempX, tempY;
public PicturedPanel()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 300);
frame.setLayout(new BorderLayout());
image = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
Image bild = null;
try
{
bild = ImageIO.read(new File("maus.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Graphics2D g= (Graphics2D) image.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, 400, 400);
g.drawImage(bild, 0, 0, null);
g.dispose();
imagePanel = new JPanel()
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
if(zeichnen)
{
Graphics2D g2 = (Graphics2D) image.createGraphics();
g2.setColor(Color.blue);
Stroke stroke = new BasicStroke(8.0f);
g2.setStroke(stroke);
g2.setPaintMode();
g2.drawLine(startX, startY, tempX, tempY);
startX = tempX;
startY = tempY;
g2.dispose();
}
Graphics2D g2d = (Graphics2D) g.create();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
};
};
imagePanel.setPreferredSize(new Dimension(400, 400));
imagePanel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
startX = arg0.getX();
startY = arg0.getY();
zeichnen = true;
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
});
imagePanel.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent arg0) {
tempX = arg0.getX();
tempY = arg0.getY();
frame.repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
});
saveButton = new JButton("Speichern");
saveButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(baos);
try {
enc.encode( image );
FileOutputStream out = new FileOutputStream("imgOut.jpg");
out.write( baos.toByteArray() );
out.close();
baos.close();
} catch (ImageFormatException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
frame.add(imagePanel);
frame.add(saveButton, BorderLayout.SOUTH);
}
public void start()
{
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new PicturedPanel().start();
}
});
}
}