hallo leute,
ich habe für die uni ein projekt machen müssen und bin so gut wie fertig. ich habe eine java program mit gui zur bearbeitung von bildern gebastelt. man kann die bilder laden und auch durch die vorgegebenen filter bearbeiten. allerdings kann ich das bearbeitete bild nicht speichern :-(
hier die beiden quellcodes. bitte um hilfe !
danke und gruß
randy
ich habe für die uni ein projekt machen müssen und bin so gut wie fertig. ich habe eine java program mit gui zur bearbeitung von bildern gebastelt. man kann die bilder laden und auch durch die vorgegebenen filter bearbeiten. allerdings kann ich das bearbeitete bild nicht speichern :-(
hier die beiden quellcodes. bitte um hilfe !
danke und gruß
randy
Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import javax.swing.JPanel;
class BildBearbeitungsPanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (image != null)
g.drawImage(image, 0, 0, null);
}
public void loadImage(String name) {
Image loadedImage = Toolkit.getDefaultToolkit().getImage(name);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(loadedImage, 0);
try {
tracker.waitForID(0);
} catch (InterruptedException e) {
}
image = new BufferedImage(loadedImage.getWidth(null), loadedImage
.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.drawImage(loadedImage, 0, 0, null);
repaint();
}
public void saveImage(String name)
{
Image savedImage = Toolkit.getDefaultToolkit().getImage(name);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(savedImage, 0);
try
{
tracker.waitForID(0);
}
catch (InterruptedException e)
{}
image = new BufferedImage(savedImage.getWidth(null), savedImage
.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.drawImage(savedImage, 0, 0, null);
}
private void filter(BufferedImageOp op) {
BufferedImage filteredImage = new BufferedImage(image.getWidth(), image
.getHeight(), image.getType());
op.filter(image, filteredImage);
image = filteredImage;
repaint();
}
private void convolve(float[] elements) {
Kernel kernel = new Kernel(3, 3, elements);
ConvolveOp op = new ConvolveOp(kernel);
filter(op);
}
public void blur() {
float weight = 1.0f / 9.0f;
float[] elements = new float[9];
for (int i = 0; i < 9; i++)
elements[i] = weight;
convolve(elements);
}
public void sharpen() {
float[] elements = { 0.0f, -1.0f, 0.0f, -1.0f, 5.f, -1.0f, 0.0f, -1.0f,
0.0f };
convolve(elements);
}
void edgeDetect() {
float[] elements = { 0.0f, -1.0f, 0.0f, -1.0f, 4.f, -1.0f, 0.0f, -1.0f,
0.0f };
convolve(elements);
}
public void brighten() {
float a = 1.5f;
float b = -20.0f;
RescaleOp op = new RescaleOp(a, b, null);
filter(op);
}
void negative() {
byte negative[] = new byte[256];
for (int i = 0; i < 256; i++)
negative[i] = (byte) (255 - i);
ByteLookupTable table = new ByteLookupTable(0, negative);
LookupOp op = new LookupOp(table, null);
filter(op);
}
void rotate() {
AffineTransform transform = AffineTransform.getRotateInstance(Math
.toRadians(180), image.getWidth() / 2, image.getHeight() / 2);
AffineTransformOp op = new AffineTransformOp(transform,
AffineTransformOp.TYPE_BILINEAR);
filter(op);
}
void ueber() {
System.out.println("Copyright by Randy D.");
}
private BufferedImage image;
}
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Bildbearbeitung
{
public static void main(String[] args)
{
JFrame frame = new BildbearbeitungFrame();
frame.setVisible(true);
}
}
class BildbearbeitungFrame extends JFrame implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
public BildbearbeitungFrame()
{
setTitle("Bildbearbeitung");
setSize(800, 600);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Container contentPane = getContentPane();
panel = new BildBearbeitungsPanel();
contentPane.add(panel, "Center");
JMenu dateiMenue = new JMenu("Datei");
oeffnenEintrag = new JMenuItem("Öffnen");
oeffnenEintrag.setMnemonic('f');//erstelle die Kurzwahl dafuer
oeffnenEintrag.addActionListener(this);
dateiMenue.add(oeffnenEintrag);
speichernEintrag = new JMenuItem("Speichern");
speichernEintrag.setMnemonic('S');
speichernEintrag.addActionListener(this);
dateiMenue.add(speichernEintrag);
dateiMenue.addSeparator(); //eine Linie hinzufuegen
beendenEintrag = new JMenuItem("Beenden");
beendenEintrag.setMnemonic('B');
beendenEintrag.addActionListener(this);
dateiMenue.add(beendenEintrag);
JMenu bearbMenue = new JMenu("Bearbeiten");
wischenEintrag = new JMenuItem("Verwischen");
wischenEintrag.addActionListener(this);
wischenEintrag.setMnemonic('w');
bearbMenue.add(wischenEintrag);
schaerfenEintrag = new JMenuItem("Schärfen");
schaerfenEintrag.setMnemonic('S');
schaerfenEintrag.addActionListener(this);
bearbMenue.add(schaerfenEintrag);
aufhellenEintrag = new JMenuItem("Aufhellen");
aufhellenEintrag.setMnemonic('h');
aufhellenEintrag.addActionListener(this);
bearbMenue.add(aufhellenEintrag);
kantenEintrag = new JMenuItem("Kantendetektor");
kantenEintrag.setMnemonic('K');
kantenEintrag.addActionListener(this);
bearbMenue.add(kantenEintrag);
negativEintrag = new JMenuItem("Negativ");
negativEintrag.setMnemonic('N');
negativEintrag.addActionListener(this);
bearbMenue.add(negativEintrag);
drehenEintrag = new JMenuItem("Umdrehen");
drehenEintrag.setMnemonic('d');
drehenEintrag.addActionListener(this);
bearbMenue.add(drehenEintrag);
JMenu hilfsMenue = new JMenu("Über");
ueberEintrag = new JMenuItem("Felix Sager & Lars Gärtner");
ueberEintrag.addActionListener(this);
hilfsMenue.add(ueberEintrag);
JMenuBar menuBar = new JMenuBar();
menuBar.add(dateiMenue);
menuBar.add(bearbMenue);
menuBar.add(hilfsMenue);
setJMenuBar(menuBar);
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == oeffnenEintrag) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("a"));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
{
public boolean accept(File f) {
String name = f.getName().toLowerCase();
return name.endsWith(".gif") || name.endsWith(".jpg")
|| name.endsWith(".jpeg") || f.isDirectory();
}
public String getDescription() {
return "Bilddateien";
}
});
int r = chooser.showOpenDialog(this);
if (r == JFileChooser.APPROVE_OPTION) {
String name = chooser.getSelectedFile().getAbsolutePath();
panel.loadImage(name);
}
}
if (source == speichernEintrag)
{
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("c"));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
String savename = f.getName().toLowerCase();
return savename.endsWith(".gif") || savename.endsWith(".jpg")
|| savename.endsWith(".jpeg") || f.isDirectory();
}
public String getDescription() {
return "Bilddateien";
}
});
int r = chooser.showSaveDialog(this);
if (r == JFileChooser.APPROVE_OPTION) {
String savename = chooser.getSelectedFile().getAbsolutePath();
panel.saveImage(savename);
}
}
else if (source == beendenEintrag)
System.exit(0);
else if (source == wischenEintrag)
panel.blur();
else if (source == schaerfenEintrag)
panel.sharpen();
else if (source == aufhellenEintrag)
panel.brighten();
else if (source == kantenEintrag)
panel.edgeDetect();
else if (source == negativEintrag)
panel.negative();
else if (source == drehenEintrag)
panel.rotate();
}
private BildBearbeitungsPanel panel;
private JMenuItem oeffnenEintrag;
private JMenuItem speichernEintrag;
private JMenuItem beendenEintrag;
private JMenuItem wischenEintrag;
private JMenuItem schaerfenEintrag;
private JMenuItem aufhellenEintrag;
private JMenuItem kantenEintrag;
private JMenuItem negativEintrag;
private JMenuItem drehenEintrag;
private JMenuItem ueberEintrag;
}