problem! bufferedimage speichern.

Status
Nicht offen für weitere Antworten.

randy

Neues Mitglied
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

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;

}
 

Marco13

Top Contributor
Hab nicht alles gelesen, aber ImageIO taucht nirgendwo auf ... kannst ja mal hier schauen: http://java.sun.com/javase/6/docs/api/javax/imageio/ImageIO.html#write(java.awt.image.RenderedImage,%20java.lang.String,%20java.io.File)
 
R

randymandy

Gast
hmm,
ich habe die speichermethode nur umgeschrieben. es klappt einfach nicht !
da muss mal ein spezi was zu sagen...
 

Maeher

Bekanntes Mitglied
Was du tust, hab ich nicht verstanden, aber mit Speichern hat es irgendwie nichts zu tun, habe ich das Gefühl...
(Zumindest diese Zeilen hier):

randy hat gesagt.:
Code:
  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);
		 
	  }
Mir scheint, diese Methoden sind bis auf die Variablennamen identisch. Wenn du schon copy&paste codest, dann bitte wenigstens nochmal überprüfen ob es Sinn ergeben kann...

Versuch's mal damit: ImageIO.write()
(Damit geht es wirklich siehe auch Marco13)
 

randy

Neues Mitglied
boah, danke für eure tipps !
aber ich bin irgendwie zu blöde, dass selber zu wuppen. ich bekomme die write-parameter nicht fehlerfrei in den quellcode eingebaut. könnte einer von euch das mal probieren ?
danke und gruß
randy
 

Maeher

Bekanntes Mitglied
randy hat gesagt.:
könnte einer von euch das mal probieren ?
Hab ich, es funzt. :bae:
Ernsthaft: Zeig was du hast, und genügend Leute werden dir sagen was falsch ist.
Wenn du nur einfach wieder irgend etwas zusammenkopierst lernst du nie wirklich programmieren und die Verwendung der API. :meld:
 
R

randymandy

Gast
ich habe doch gesagt, dass ich bei der speichermethode nichts hinbekomme und einfach den loadbefehl umgeschrieben habe...
hilfst du mir jetzt und stellst den laufenden quellcode online oder nicht ?!
danke
randy
 

Marco13

Top Contributor
Ehrlich gesagt wirkt es sehr suspekt, wenn's bei einem Programm, in dem mal so locker-flockig aus der Hüfte eine Kantenerkennung, bilinear gefiltertes Rotieren verbaut sind, dann am Speichern haken soll. Es legt zumindest den Tipp nahe, das Speichern doch auch so zu lösen, wie die anderen Punkte - also vermutlich(!) durch googlen nach Beispielcodeschnispeln, die man zusammenkopieren kann. Wenn du dich jetzt angegriffen fühlst, steht es dir frei, zu erläutern, was das Problem dabei ist, eine Methode (die schon zwei mal verlinkt wurde) aufzurufen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem mit BufferedImage und PrinterJob im Querformat Allgemeine Java-Themen 1
M Problem mit Durchsuchen von BufferedImage Allgemeine Java-Themen 10
T BufferedImage problem Allgemeine Java-Themen 6
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben