Hilfstellung beim Speichern eines Bildes.

Keviehn

Mitglied
Hallo Leute,

ich habe mir ein kleines Programm gebaut mit dem es möglich ist ein Bild zu laden und es auch zu ändern. Nun möchte ich natürlich mein geändertes Bild auch speichern können, dabei bräuchte ich Eure hilfe. :toll:

Folgenden Code verwende ich für das Laden:
Java:
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();


JFileChooser
Java:
  public void actionPerformed(ActionEvent evt) {
    Object source = evt.getSource();
    if (source == loadEintrag) {
      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(".png") || name.endsWith(".gif") ||
                           name.endsWith(".jpg") || name.endsWith(".jpeg") || f.isDirectory();
        }

                public String getDescription() {
                    return "Images (*.png, *.gif, *.jpg, *.jpeg)";
        }
      });

      int r = chooser.showOpenDialog(this);
      if (r == JFileChooser.APPROVE_OPTION) {
        String name = chooser.getSelectedFile().getAbsolutePath();
        panel.loadImage(name);

Nun stellt sich für mich die Frage ob man diesen Code so umschreiben kann, das man diesen auch als Speichern verwenden kann.

Vielen Dank im vorraus.
 
G

Gast2

Gast
Den FileDialog zum auswählen des Ziels kannst du ja so lassen.
Statt loadImage führst du dann z.b. ImageIO.write aus.
 

L-ectron-X

Gesperrter Benutzer
Hmm naja, ich würde dann doch eher
Code:
chooser.showSaveDialog(this);
zur Auswahl des Ziels aufrufen. ;)
 

Keviehn

Mitglied
Den Dialog habe ich nun so angepasst:
Scheint auch zu funktionieren.

Java:
      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 "Images (*.png, *.gif, *.jpg, *.jpeg)";
            }
          });

          int r = chooser.showSaveDialog(this);
          if (r == JFileChooser.APPROVE_OPTION) {

            String savename = chooser.getSelectedFile().getAbsolutePath();
            panel.saveImage(savename);

Wird nun die eigentliche Funktion ausfgerufen erhalte ich leider eine Fehlermeldung.

Code:
java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
(Wird sicherlich keine Meldung sein um das Problem zu beheben).

Hier nochmal der angepasste Code ohne ImageIO.write. Nutze ich ImageIO.write erhalte ich Fehlermeldungen beim Compilieren.

Java:
  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);

    }
 

mabuhay

Bekanntes Mitglied
Auf welcher Zeile tritt denn die Fehlermeldung auf? evtl bei new BufferedImage()?

Gib mal vor
Java:
Image savedImage = Toolkit.getDefaultToolkit().getImage(name);

Den pfad aus
Java:
System.out.println(name);
um sicherzugehen dass die Datei auch gefunden wird. Bin mir aber nicht sicher obs eh ne Fehlermeldung geben würde falls nicht. Aber evtl ist savedImage nicht ok und dann wird für Höhe und Breite -1 zurückgegeben...

Hmm, ich sehe gerade du wählst ja das ZIEL mit dem FileChooser, das Bild existiert ja dann noch nicht. Beim erstellen eines neuen BufferedImage verwendest du dann aber die Breit und Höhe dieses nicht existierenden Bildes oder?

mfg
 

Keviehn

Mitglied
Ich habe meinen Code jetzt durch ImageIO.write erweitert.

Java:
  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);
        ImageIO.write(savedImage, "gif", new File(savedImage));
        ImageIO.write(savedImage, "png", new File(savedImage));

Nun erhalte ich die Fehlermeldung:

Code:
symbol  : constructor File(java.awt.Image)
location: class java.io.File
        ImageIO.write(savedImage, "gif", new File(savedImage));


Setze ich
Java:
System.out.println(name);
an die gewünschte Postition, erhalte ich den gleichen Fehler wir schon beschrieben.
 

mabuhay

Bekanntes Mitglied
Hallo

Also bei
Java:
System.out.println(name);
kannst du entweder einen null-pointer fehler erhalten oder es wird irgend ein String zurückgegeben. Dein Fehler kommt sicher nicht von hier.

zu imateIO. hier lese ich, nur jpg und png sind unterstützt:
"Since JDK1.4.2, javax.imageio.ImageIO lets you save and restore Images to disk in a platform independent format. "png" and "jpeg" format are supported. With ImageIO, instead of Image you use BufferedImage which is a subclass of Image. "


Also ich glaube du hast generell was falsch. 'name' is so wie ich das sehe der Name oder der Pfad des Bildes das du laden/speichern willst. Du lädst das Bild also mit
Java:
    Image savedImage = Toolkit.getDefaultToolkit().getImage(name);
und speicherst es dann mit imageIO.write. Dem File-Objekt in imageIO.write übergibst du aber das Image-Objekt. Du musst dem File-Objekt einen Pfad/URL übergeben, daher wahrscheinlich auch deine Fehlermeldung.
Poste doch manchmal die ganze Fehlermeldung, ist da nicht noch mehr?

mfg
 

Keviehn

Mitglied
Also.... habe meinen Code noch ein ganz wenig angepasst.

Hier noch mal der Dialog:
Java:
if (source == saveEintrag)
    {
      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(".png") || savename.endsWith(".jpeg")
                    ||  f.isDirectory();
         }

            public String getDescription() {
              return "Images (*.png, *.jpeg)";
            }
          });

          int r = chooser.showSaveDialog(this);
          if (r == JFileChooser.APPROVE_OPTION) {

            String savename = chooser.getSelectedFile().getAbsolutePath();
            panel.saveImage(savename);
          }
        }

und hier die Speicherfunktion:
Java:
  public void saveImage(String name){
    Image saveImage = Toolkit.getDefaultToolkit().getImage(name);
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(saveImage, 0);
    try {
      tracker.waitForID(0);
    } catch (InterruptedException e) {
    }
    image = new BufferedImage(saveImage.getWidth(null), saveImage
        .getHeight(null), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();
    g2.drawImage(saveImage, 0, 0, null);
    ImageIO.write(saveImage, "jpeg", saveImage);


  }

Folgende Fehlermeldung erhalte ich:
Code:
BildBearbeitungsPanel.java:78:12: cannot find symbol
symbol  : method write(java.awt.Image,java.lang.String,java.awt.Image)
location: class javax.imageio.ImageIO
    ImageIO.write(saveImage, "jpeg", saveImage);
           ^
1 error

Als Hinweiß: Ich arbeite zurzeit noch mit den "Java Editor".

Ich vermute sehr stark, das ich die Speicher-Funktion ansich nicht hinbekommen werde und irgendwo einen groben Fehler habe.

Gibt es vielleicht eine andere Möglichkeit mein Bild zu speichern? Mir würde es im Notfall auch reichen einen JButton zu erstellen, der bei Bestätigung einfach das Bild irgendwo hinspeichern.
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Vergiss Toolkit zum Einlesen von Bildern, es ist veraltet.
Benutze statt dessen ImageIO.read(...). Das ist wesentlich einfacher und effizienter, und den MediaTracker brauchst du dann auch nicht mehr.
 

Keviehn

Mitglied
Ich würde die bestehenden Funktionen ungern anfassen. Ich bin glücklich das sie überhaupt funktionieren.

aber ich kann es in der Speicher funktion mal probieren.

Danke.
 

Keviehn

Mitglied
Ich mal wieder. Ich habe mich jetzt von meinen JFileChooser - Speicher - Eintrag verabschiedet. Ich werde es sicherlich nicht so ohne weiteres hinbekommen. Der ganze Freitag ging leider schon drauf.

Nun hoffentlich eine weitere Frage an Euch:

Ist es möglich eine einfach Speicherfunktion zu erstellen? Sprich ein Button (Speichern) der nach dem Bestätigen einfach ein Bild speichert. Ohne Pfad- und Dateinamen - Auswahl?

Auch wenn jetzt Eure Herzen und Augen weh tun werden, hier mal der gesamte Code:

BildBearbeitungsPanel
Java:
//Import der Java-Klasse
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.File;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import java.awt.color.ColorSpace;

import java.lang.String;

import javax.swing.JPanel;
import javax.imageio.*;







class BildBearbeitungsPanel extends JPanel
{

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 loadImageSW(String name) {
    Image loadedImageSW = Toolkit.getDefaultToolkit().getImage(name);
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(loadedImageSW, 0);
    try {
      tracker.waitForID(0);
    } catch (InterruptedException e) {
    }
    image = new BufferedImage(loadedImageSW.getWidth(null), loadedImageSW
        .getHeight(null), BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g2 = image.createGraphics();
    g2.drawImage(loadedImageSW, 0, 0, null);

    repaint();
  }

  public void save (){

    }


  private void filter(BufferedImageOp op) {
    BufferedImage filteredImage = new BufferedImage(image.getWidth(), image
        .getHeight(), image.getType());
    op.filter(image, filteredImage);
    image = filteredImage;
    repaint();
  }

  //void greyscale() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  void invert() {
    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 lightbrighter() {                     
    float a = 1.5f;
    float b = 0;
    RescaleOp op = new RescaleOp(a, b, null);
    filter(op);
  }

  void lightdarker() {                      
    float a = 0.5f;
    float b = 0;
    RescaleOp op = new RescaleOp(a, b, null);
    filter(op);
  }

  void contrastbrighter() {                  
     float[] elements = { 0.0f, -1.0f, 0.0f, -1.0f, 5.f, -1.0f, 0.0f, -1.0f,
        0.0f };
    convolve(elements);
  }

  void contrastdarker() {                    
     float[] elements = { 0.0f, 1.0f, 0.0f, 1.0f, 5.f, 1.0f, 0.0f, 1.0f,
        0.0f };
    convolve(elements);
  }

  //void stainred() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  //void staingreen() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  //void stainblue() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  //void scale() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  //void spiral() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  //void wave() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  void rotateleft() {
        AffineTransform transform = AffineTransform.getRotateInstance(Math
        .toRadians(-90), image.getWidth() / 2, image.getHeight() / 2);
        AffineTransformOp op = new AffineTransformOp(transform,
        AffineTransformOp.TYPE_BILINEAR);
        filter(op);
  }

  void rotateright() {
        AffineTransform transform = AffineTransform.getRotateInstance(Math
        .toRadians(90), image.getWidth() / 2, image.getHeight() / 2);
        AffineTransformOp op = new AffineTransformOp(transform,
        AffineTransformOp.TYPE_BILINEAR);
        filter(op);
  }

  //void rotateany() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  void reflecthorizontal() {
        AffineTransform transform = AffineTransform.getRotateInstance(Math
        .toRadians(180), image.getWidth() / 2, image.getHeight() / 2);
        AffineTransformOp op = new AffineTransformOp(transform,
        AffineTransformOp.TYPE_BILINEAR);
        filter(op);
  }

  //void reflectvertical() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  //void dieaway() {
    //System.out.println("Noch nicht verfügbar!");
  //}

  void fuzzy() {
    float weight = 2.0f / 18.0f;
    float[] elements = new float[18];
    for (int i = 0; i < 18; i++)
      elements[i] = weight;
      convolve(elements);
  }

  void praege() {
    float[] elements = { 0.0f, -1.0f, 0.0f, -1.0f, 4.f, -1.0f, 0.0f, -1.0f,
        0.0f };
    convolve(elements);
  }

  void test() {

    }

  private void convolve(float[] elements) {
    Kernel kernel = new Kernel(3, 3, elements);
    ConvolveOp op = new ConvolveOp(kernel);
    filter(op);
  }

  private BufferedImage image;
}

Bildbearbeitung:
Java:
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



{

  // Anfang Methode
  public static void main(String[] args)
  {
    JFrame frame = new BildbearbeitungFrame();     

    frame.setVisible(true);                         


  }
  // Ende Methode
}

class BildbearbeitungFrame extends JFrame implements ActionListener
{


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");          
    
        loadEintrag = new JMenuItem("Bild laden");  
        loadEintrag.addActionListener(this);
        dateiMenue.add(loadEintrag);                
        
        loadEintragSW = new JMenuItem("Bild laden (S/W)");  
        loadEintragSW.addActionListener(this);
        dateiMenue.add(loadEintragSW);                
        
        saveEintrag = new JMenuItem("Bild speichern");
        saveEintrag.addActionListener(this);
        dateiMenue.add(saveEintrag);

        dateiMenue.addSeparator();                  

        closeEintrag = new JMenuItem("Programm schließen");
        closeEintrag.addActionListener(this);
        dateiMenue.add(closeEintrag);
    
    
    
    JMenu colorMenue = new JMenu("Farben");
    
        //greyscaleEintrag = new JMenuItem("Graustufe");
        //greyscaleEintrag.addActionListener(this);
        //colorMenue.add(greyscaleEintrag);
    
        invertEintrag = new JMenuItem("Invertieren");
        invertEintrag.addActionListener(this);
        colorMenue.add(invertEintrag);
    
    JMenu lightMenue = new JMenu("Helligkeit");
    
        lightbrighterEintrag = new JMenuItem("Heller");
        lightbrighterEintrag.addActionListener(this);
        lightMenue.add(lightbrighterEintrag);
        
        lightdarkerEintrag = new JMenuItem("Dunkler");
        lightdarkerEintrag.addActionListener(this);
        lightMenue.add(lightdarkerEintrag);
    
    JMenu contrastMenue = new JMenu("Kontrast");
    
        contrastbrighterEintrag = new JMenuItem("Heller");
        contrastbrighterEintrag.addActionListener(this);
        contrastMenue.add(contrastbrighterEintrag);

        contrastdarkerEintrag = new JMenuItem("Dunkler");
        contrastdarkerEintrag.addActionListener(this);
        contrastMenue.add(contrastdarkerEintrag);
    
    JMenu stainMenue = new JMenu("Einfärben");
    
        //stainredEintrag = new JMenuItem("Rot");
        //stainredEintrag.addActionListener(this);
        //stainMenue.add(stainredEintrag);

        //staingreenEintrag = new JMenuItem("Grün");
        //staingreenEintrag.addActionListener(this);
        //stainMenue.add(staingreenEintrag);
        
        //vstainblueEintrag = new JMenuItem("Blau");
        //stainblueEintrag.addActionListener(this);
        //stainMenue.add(stainblueEintrag);
    
    
    
    JMenu transMenue = new JMenu("Transformationen");
    
        //scaleEintrag = new JMenuItem("Skalieren");
        //scaleEintrag.addActionListener(this);
        //transMenue.add(scaleEintrag);
        
        //spiralEintrag = new JMenuItem("Spirale");
        //spiralEintrag.addActionListener(this);
        //transMenue.add(spiralEintrag);
        
        //waveEintrag = new JMenuItem("Welle");
        //waveEintrag.addActionListener(this);
        //transMenue.add(waveEintrag);
        
    JMenu rotateMenue = new JMenu("Rotieren");
    
        rotateleftEintrag = new JMenuItem("90° Links");
        rotateleftEintrag.addActionListener(this);
        rotateMenue.add(rotateleftEintrag);
        
        rotaterightEintrag = new JMenuItem("90° Rechts");
        rotaterightEintrag.addActionListener(this);
        rotateMenue.add(rotaterightEintrag);

        rotateMenue.addSeparator();
        
        //rotateanyEintrag = new JMenuItem("Beliebig");
        //rotateanyEintrag.addActionListener(this);
        //rotateMenue.add(rotateanyEintrag);
    
    
    JMenu reflectMenue = new JMenu("Spiegeln");
    
        reflecthorizontalEintrag = new JMenuItem("Horizontal");
        reflecthorizontalEintrag.addActionListener(this);
        reflectMenue.add(reflecthorizontalEintrag);
    
        //reflectverticalEintrag = new JMenuItem("Vertikal");
        //reflectverticalEintrag.addActionListener(this);
        //reflectMenue.add(reflectverticalEintrag);
    
    
    
    JMenu filterMenue = new JMenu("Filter");

        //dieawayEintrag = new JMenuItem("Verrauschen");
        //dieawayEintrag.addActionListener(this);
        //filterMenue.add(dieawayEintrag);
        
        fuzzyEintrag = new JMenuItem("Unschärfe");
        fuzzyEintrag.addActionListener(this);
        filterMenue.add(fuzzyEintrag);
        
        praegeEintrag = new JMenuItem("Prägeeffekt");
        praegeEintrag.addActionListener(this);
        filterMenue.add(praegeEintrag);

    

    JMenu filter2Menue = new JMenu("Sonstige Filter");
    
        testEintrag = new JMenuItem("Test für Effekte, Filter etc.");
        testEintrag.addActionListener(this);
        filter2Menue.add(testEintrag);




    JMenuBar menuBar = new JMenuBar();              
    menuBar.add(dateiMenue);                       
    menuBar.add(colorMenue);
        colorMenue.add(lightMenue);                 
        colorMenue.add(contrastMenue);
        colorMenue.add(stainMenue);
    menuBar.add(transMenue);
        transMenue.add(rotateMenue);
        transMenue.add(reflectMenue);
    menuBar.add(filterMenue);
    menuBar.add(filter2Menue);
    setJMenuBar(menuBar);


  }



  public void actionPerformed(ActionEvent evt) {
    Object source = evt.getSource();
    if (source == loadEintrag) {
      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(".png") ||                    
                           name.endsWith(".jpg") || name.endsWith(".jpeg") || f.isDirectory();
        }

                public String getDescription() {
                    return "Images (*.png, *.jpg, *.jpeg)";
        }
      });

      int r = chooser.showOpenDialog(this);                                                     
      if (r == JFileChooser.APPROVE_OPTION) {
        String name = chooser.getSelectedFile().getAbsolutePath();
        panel.loadImage(name);
      }
    }
    
if (source == loadEintragSW) {
      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(".png") ||                    
                           name.endsWith(".jpg") || name.endsWith(".jpeg") || f.isDirectory();
        }

                public String getDescription() {
                    return "Images (*.png, *.jpg, *.jpeg)";
        }
      });

      int r = chooser.showOpenDialog(this);                                                    
      if (r == JFileChooser.APPROVE_OPTION) {
        String name = chooser.getSelectedFile().getAbsolutePath();
        panel.loadImageSW(name);
      }
    }
    

    else if (source == closeEintrag)                                  
      System.exit(0);
    else if (source == saveEintrag)
      panel.save();
    //else if (source == greyscaleEintrag)
      //panel.greyscale();
    else if (source == invertEintrag)
      panel.invert();
    else if (source == lightbrighterEintrag)
      panel.lightbrighter();
    else if (source == lightdarkerEintrag)
      panel.lightdarker();
    else if (source == contrastbrighterEintrag)
      panel.contrastbrighter();
    else if (source == contrastdarkerEintrag)
      panel.contrastdarker();
    //else if (source == stainredEintrag)
      //panel.stainred();
    //else if (source == staingreenEintrag)
      //panel.staingreen();
    //else if (source == stainblueEintrag)
      //panel.stainblue();
    //else if (source == scaleEintrag)
      //panel.scale();
    //else if (source == spiralEintrag)
      //panel.spiral();
    //else if (source == waveEintrag)
      //panel.wave();
    else if (source == rotateleftEintrag)
      panel.rotateleft();
    else if (source == rotaterightEintrag)
      panel.rotateright();
    //else if (source == rotateanyEintrag)
      //panel.rotateany();
    else if (source == reflecthorizontalEintrag)
      panel.reflecthorizontal();
    //else if (source == reflectverticalEintrag)
      //panel.reflectvertical();
    //else if (source == dieawayEintrag)
      //panel.dieaway();
    else if (source == fuzzyEintrag)
      panel.fuzzy();
    else if (source == praegeEintrag)
      panel.praege();
    else if (source == testEintrag)
      panel.test();
      
  }


  private BildBearbeitungsPanel panel;
  
  private JMenuItem loadEintrag;
  private JMenuItem loadEintragSW;
  private JMenuItem saveEintrag;
  private JMenuItem closeEintrag;
  
  //private JMenuItem greyscaleEintrag;
  private JMenuItem invertEintrag;
  
  private JMenuItem lightbrighterEintrag;
  private JMenuItem lightdarkerEintrag;
  
  private JMenuItem contrastbrighterEintrag;
  private JMenuItem contrastdarkerEintrag;
  
  //private JMenuItem stainredEintrag;
  //private JMenuItem staingreenEintrag;
  //private JMenuItem stainblueEintrag;
  
  private JMenuItem rotateleftEintrag;
  private JMenuItem rotaterightEintrag;
  //private JMenuItem rotateanyEintrag;
  
  private JMenuItem reflecthorizontalEintrag;
  //private JMenuItem reflectverticalEintrag;
  
  //private JMenuItem scaleEintrag;
  //private JMenuItem spiralEintrag;
  private JMenuItem waveEintrag;
  
  //private JMenuItem dieawayEintrag;
  private JMenuItem fuzzyEintrag;
  private JMenuItem praegeEintrag;
  
  private JMenuItem testEintrag;



  
}

Würde die Möglichkeit bestehen das Ihr mir diese Funktion in der BildBearbeitungsPanel (public void save) einbauen würdet. Ich erwarte von Euch keine Wunder!

Danke für Eure zahlreiche Hilfe
Keviehn
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Im Konstruktor deiner Klasse erzeugst du eine JFileChooser-Referenz, die du in der save()-Methode benutzt, um einen Auswahldialog anzuzeigen. Wenn du mit FileExtensionFilter arbeitest, kannst du eine ordentliche Lösung erzeugen.

Hier mal die Kurzversion:
Java:
  public void save () {
    chooser.showSaveDialog(this);
    String name = chooser.getSelectedFile().getAbsolutePath();
    if(name != null) {
      try {
        ImageIO.write(image, "jpg", new File(name));
      }
      catch(IOException e) {
        JOptionPane.showMessageDialog(this,
        "Fehler beim Speichern!",
        "IOException",
        JOptionPane.ERROR_MESSAGE);
      }
    }
  }
 

Keviehn

Mitglied
Habe Deinen Code in meinen hinzugefügt.
Leider erhalte ich folgene Meldung:

Code:
symbol  : variable image
location: class BildbearbeitungFrame
                       ImageIO.write(image, "jpg", new File(name));

Hier der Schnipsel:

Java:
if (source == saveEintrag) {
      JFileChooser chooser = new JFileChooser();    //Erzeugt ein 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(".png") ||                    //Akzeptiere Dateiendungen
                           name.endsWith(".jpg") || name.endsWith(".jpeg") || f.isDirectory();
        }

                public String getDescription() {
                    return "Images (*.png, *.jpg, *.jpeg)";
        }
      });

      int r = chooser.showSaveDialog(this);                                                     //Erzeugt den "Öffnen - Dialog"
      if (r == JFileChooser.APPROVE_OPTION) {
        String name = chooser.getSelectedFile().getAbsolutePath();
                    if(name != null) {
                            try {
                                ImageIO.write(image, "jpg", new File(name));
                            }
                       catch(IOException e) {
                            JOptionPane.showMessageDialog(this,
                              "Fehler beim Speichern!",
                              "IOException",
                          JOptionPane.ERROR_MESSAGE);
     }
      }
         }
    }
 

ARadauer

Top Contributor
ja was ist image? Ich seh in deinem code keine deklaration davon...

was ist das überhaupt für eine Meldung wo kommt das her, da steht nix von einem fehler?

Java:
 String name = chooser.getSelectedFile() << das wäre schon ein file! .getAbsolutePath(); << jetzt hast du den namen besorg...
                    if(name != null) {
                            try {
                                ImageIO.write(image, "jpg", new File(name)); << hier machst du wieder ein file... nimm doch gleich das von getSelectedFile ..
 

Keviehn

Mitglied
Die komplette Fehlermeldung lautet:

Code:
Bildbearbeitung.java:287:47: cannot find symbol
symbol  : variable image
location: class BildbearbeitungFrame
                                ImageIO.write(image, "jpg", new File(name));
                                              ^
1 error

Diese kommt beim Kompilieren mit dem Java Editor in Version 9.15.

Bezüglich Deines Beispielcodes ... ich habe "einfach" den Schnipsel von L-ectron-X übernommen und da war es auch so eingetragen.

Werde mir trotzdem Deinen gleich mal anschauen.
 

ARadauer

Top Contributor
cannot find symbol bedeutet das er die variable nicht finde. Um das zu ösen muss man echt kein Forum kontaktieren...
ich habe "einfach" den Schnipsel von L-ectron-X übernommen
Grundsätzlich musst du schon ein wenig mitdenken, was du da übernimmst.

Wenn du sagst du willst ein Image speichern und L-ectron-X verwendet in deinem Code schnippsel die Variable image, geht der davon aus das du mitdenkst und da deine variable wo du dein zu speicherndes image hälst einsetzt....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
S Fehler beim Programm Java Basics - Anfänger-Themen 2
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
Avalon Programmierstil beim Mocken Java Basics - Anfänger-Themen 45
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
J Hilfe beim verstehen Java Basics - Anfänger-Themen 3
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
L Anfänger braucht Hilfe - Stecke beim Lernen fest Java Basics - Anfänger-Themen 10
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
W Hilfe beim Chat Programm Java Basics - Anfänger-Themen 14
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Pendeltouren beim Savings erfahren "schummeln" in Ordnung? Java Basics - Anfänger-Themen 1
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
N Fehlermeldung beim ausführen des Programmes.. Java Basics - Anfänger-Themen 3
K Classpath RXTX beim Raspberry Java Basics - Anfänger-Themen 5
F (Eclipse) Beim importieren etwas fehlerhaft bitte um Hilfe :) Java Basics - Anfänger-Themen 3
B Datentypen Welcher Typ wird beim Casten übernommen? Java Basics - Anfänger-Themen 12
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
V Erste Schritte Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben