Hallo ihr alle,
ich habe gerade eine Projektaufgabe zu meistern. Diese beinhaltet, das wir ein Bild laden und es durch mehrere Filter jagen. Die Filter sind schon alle soweit am laufen, das Problem liegt nur noch bei dem Wiederherstellbutton, dieser will einfach nicht funktionieren. Ich habe dazu eigene Button entworfen, die funktionieren auch alle. Ich lade eine externe Bilddatei als BufferedImage, und habe noch ein weiteres BufferedImage in meiner Datei. Nun muss ich nur wissen welches davon das original Bild ist und wie ich das dann hervorzaubern kan wenn ich auf den entsprechnenden Button klicke. Habt ihr eine Ahnung wie ich das anstellen kann?
ich habe gerade eine Projektaufgabe zu meistern. Diese beinhaltet, das wir ein Bild laden und es durch mehrere Filter jagen. Die Filter sind schon alle soweit am laufen, das Problem liegt nur noch bei dem Wiederherstellbutton, dieser will einfach nicht funktionieren. Ich habe dazu eigene Button entworfen, die funktionieren auch alle. Ich lade eine externe Bilddatei als BufferedImage, und habe noch ein weiteres BufferedImage in meiner Datei. Nun muss ich nur wissen welches davon das original Bild ist und wie ich das dann hervorzaubern kan wenn ich auf den entsprechnenden Button klicke. Habt ihr eine Ahnung wie ich das anstellen kann?
Java:
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.image.*;
import java.awt.color.ColorSpace;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class BildbearbeitungGUI extends JFrame{
private BufferedImage src = null;
private BufferedImage dst;
private ImagePanel panel;
private Graphics g;
private JMenuItem load;
private JMenuItem save;
private JMenuItem exit;
private boolean a = false;
private int brightness = 0;
private int contrast = 10;
//ButtonBilder
protected JLabel hintergrund = new JLabel();
protected ImageIcon a1 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonAup.jpg"));
protected ImageIcon a2 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonAdown.jpg"));
protected ImageIcon b1 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonBup.jpg"));
protected ImageIcon b2 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonBdown.jpg"));
protected ImageIcon c1 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonCup.jpg"));
protected ImageIcon c2 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonCdown.jpg"));
protected ImageIcon d1 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonDup.jpg"));
protected ImageIcon d2 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonDdown.jpg"));
protected ImageIcon e1 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonEup.jpg"));
protected ImageIcon e2 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonEdown.jpg"));
protected ImageIcon f1 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonFup.jpg"));
protected ImageIcon f2 = new ImageIcon(BildbearbeitungGUI.class.getResource("ButtonFdown.jpg"));
protected ImageIcon reverse1 = new ImageIcon(BildbearbeitungGUI.class.getResource("reverseup.jpg"));
protected ImageIcon reverse2 = new ImageIcon(BildbearbeitungGUI.class.getResource("reversedown.jpg"));
//Button Objekte
private JButton aa1 = new JButton(a1);
private JButton bb1 = new JButton(b1);
private JButton cc1 = new JButton(c1);
private JButton dd1 = new JButton(d1);
private JButton ee1 = new JButton(e1);
private JButton ff1 = new JButton(f1);
private JButton rr1 = new JButton(reverse1);
public BildbearbeitungGUI(){
JMenuBar menuBar = new JMenuBar();
JMenu datei = new JMenu("Datei");
LoadSaveListener loadSaveListener = new LoadSaveListener();
load = new JMenuItem("Öffnen");
save = new JMenuItem("Speichern");
exit = new JMenuItem("Beenden");
load.addActionListener(loadSaveListener);
save.addActionListener(loadSaveListener);
exit.addActionListener(loadSaveListener);
setLayout(new BorderLayout());
menuBar.add(datei);
datei.add(load);
datei.add(save);
datei.add(exit);
//Werkzeugpanel
JPanel palettePanel = new JPanel();
palettePanel.setBackground(Color.BLACK);
add(palettePanel, BorderLayout.SOUTH);
aa1.setBorder(null);
aa1.setPressedIcon(a2);
aa1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = true;
new malen();
}
});
bb1.setBorder(null);
bb1.setPressedIcon(b2);
bb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = false;
grau();
}
});
cc1.setBorder(null);
cc1.setPressedIcon(c2);
cc1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = false;
new HelligkeitKontrast();
}
});
dd1.setBorder(null);
dd1.setPressedIcon(d2);
dd1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = false;
invertImage();
}
});
ee1.setBorder(null);
ee1.setPressedIcon(e2);
ee1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = false;
scharf();
}
});
ff1.setBorder(null);
ff1.setPressedIcon(f2);
ff1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = false;
weich();
}
});
rr1.setBorder(null);
rr1.setPressedIcon(reverse2);
rr1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
reverse();
}
});
//Buttons sichtbar machen
palettePanel.add(hintergrund);
palettePanel.add(aa1);
palettePanel.add(bb1);
palettePanel.add(cc1);
palettePanel.add(dd1);
palettePanel.add(ee1);
palettePanel.add(ff1);
palettePanel.add(rr1);
src = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
panel = new ImagePanel(/*src*/);
panel.addMouseMotionListener(new malen());
setJMenuBar(menuBar);
add(panel);
}
//Main Methode
public static void main(String[] arg){
BildbearbeitungGUI frame = new BildbearbeitungGUI();
frame.pack();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
//Funktion zum Zeichnen (ButtonA)
private class malen implements MouseMotionListener{
public void mouseDragged(MouseEvent e){
if (a == true){
g.setColor(Color.BLACK);
g.fillOval(e.getX(), e.getY(),6,6);
processImage();
}
}
public void mouseMoved(MouseEvent e){}
}
public void grau(){
ColorConvertOp grayScaleConversionOp = new ColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_GRAY), null);
grayScaleConversionOp.filter(src, dst);
g.drawImage(dst, 0, 0, null);
processImage();
}
public void reverse() {
// dst = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_RGB);
// panel.repaint();
// dst = new BufferedImage(src.getWidth(null), src.getHeight(null),
// BufferedImage.TYPE_INT_RGB);
// g.drawImage(src, 0, 0, null);
// g = src.getGraphics();
// processImage();
//panel.repaint();
}
public class ImagePanel extends JPanel{
public ImagePanel(){}
public void paintComponent(Graphics g){
if(dst != null){
g.drawImage(dst, 0, 0, dst.getWidth(), dst.getHeight(), null);
}
}
public Dimension getPreferredSize(){
return new Dimension(src.getWidth(), src.getHeight());
}
}
//Laden, Speichern, Beenden
private class LoadSaveListener implements ActionListener{
public void actionPerformed(ActionEvent e){
JFileChooser fileChooser = new JFileChooser();
if(e.getSource() == load){
int state = fileChooser.showOpenDialog(null);
fileChooser.setName("Datei öffnen");
if(state == JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
try{
BufferedImage loadImg = ImageIO.read(file);
setTitle(file.getName());
src = new BufferedImage(loadImg.getWidth(), loadImg.getHeight(), BufferedImage.TYPE_INT_RGB);
g = src.getGraphics();
g.drawImage(loadImg, 0, 0, null);
setSize(loadImg.getWidth(), loadImg.getHeight()+(97));
}
catch(IOException ioE){
System.out.println(ioE.getMessage());
}
}
processImage();
}
if(e.getSource() == save){
int state = fileChooser.showSaveDialog(null);
fileChooser.setName("Datei Speichern");
if(state == JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
try{
BufferedImage toSave = new BufferedImage(dst.getWidth(), dst.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics saveG = toSave.getGraphics();
saveG.drawImage(dst, 0, 0, null);
ImageIO.write(toSave, "jpeg", file);
}
catch(IOException ioE){
System.out.println(ioE.getMessage());
}
}
}
if(e.getSource() == exit){
System.exit(0);
}
}
}
//Negativ erstellen Button D
public void invertImage ()
{
BufferedImage dst= new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_RGB);
{
int width = src.getWidth();
int height = src.getHeight();
for (int x = 0 ; x < width ; x++)
{
for (int y = 0 ; y < height ; y++)
{
int rgbValue = src.getRGB(x, y);
Color color = new Color(rgbValue);
int red = 255 - color.getRed();
int green = 255 - color.getGreen();
int blue = 255 - color.getBlue();
color = new Color (red, green, blue);
dst.setRGB(x,y,color.getRGB());
}
}
g.drawImage(dst,0,0,null);
processImage();
}
}
public void weich()
{
float[] w = {0.1f, 0.2f, 0.1f,
0.2f, 0.0f, 0.2f,
0.1f, 0.2f, 0.1f};
BufferedImageOp weichFilter = new ConvolveOp(new Kernel(3,3, w), ConvolveOp.EDGE_NO_OP, null);
weichFilter.filter(src, dst);
g.drawImage(dst, 0, 0, null);
processImage();
}
public void scharf()
{
float[] w = {0.f, -1.f, 0.f,
-1.f, 5.f, -1.f,
0.f, -1.f, 0.f};
BufferedImageOp weichFilter = new ConvolveOp(new Kernel(3,3, w), ConvolveOp.EDGE_NO_OP, null);
weichFilter.filter(src, dst);
g.drawImage(dst, 0, 0, null);
processImage();
}
//Klasse für Helligkeit und Kontrast
private class HelligkeitKontrast extends JFrame{
private JSlider brightSlide;
private JSlider contrastSlide;
private JPanel sliders;
public HelligkeitKontrast(){
sliders = new slidePanel();
add(sliders);
pack();
setVisible(true);
}
class slidePanel extends JPanel{
public slidePanel(){
brightSlide = new JSlider(-255,255,brightness);
contrastSlide = new JSlider(-30,30,contrast);
brightSlide.addChangeListener(new slideListener());
contrastSlide.addChangeListener(new slideListener());
JLabel brightLab = new JLabel("Helligkeit: ");
JLabel contLab = new JLabel("Kontrast: ");
Box brightBox = Box.createHorizontalBox();
Box contrastBox = Box.createHorizontalBox();
setLayout(new BorderLayout());
brightBox.add(brightLab);
brightBox.add(brightSlide);
contrastBox.add(contLab);
contrastBox.add(contrastSlide);
add(brightBox, BorderLayout.NORTH);
add(contrastBox, BorderLayout.SOUTH);
}
}
class slideListener implements ChangeListener{
public void stateChanged(ChangeEvent e) {
if(e.getSource() == contrastSlide){
contrast = contrastSlide.getValue();
}
if(e.getSource() == brightSlide){
brightness = brightSlide.getValue();
}
processImage();
}
}
}
private void processImage(){
//Helligkeit erhöhen
float cont = (float)contrast / 10;
BufferedImageOp op = new RescaleOp(cont, brightness, null);
dst = op.filter(src, null);
panel.repaint();
}
}
Zuletzt bearbeitet: