Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam Debianowców.
Mam problem z metodą saveFile w moim programie-ogolnie program służy do prostych operacji graficznych na wczytywanych plikach-zmienione pliki chciałbym zapisywać jednak mam coś źle we wcześniej wspomnianej metodzie. Wstawię osobno metody openFile i saveFile.
/* metody * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication8; import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ByteLookupTable; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import java.awt.image.LookupOp; import java.awt.image.RescaleOp; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.io.File; /*import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream;*/ import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.IIOImage; import javax.imageio.ImageIO; //import javax.swing.ImageIcon; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.FileImageOutputStream; import javax.imageio.stream.ImageOutputStream; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author E5500 */ class Ramka extends JFrame implements Printable{ public Ramka() { setTitle("Program graficzny"); setSize(800,1000); //panel-transformacje obrazu JPanel panel=new JPanel() { @Override public void paintComponent(Graphics g) { super.paintComponents(g); if (image!=null)g.drawImage(image, 0, 0, null);} }; add(panel, BorderLayout.CENTER); //menu programu JMenuBar menuBar=new JMenuBar(); setJMenuBar(menuBar); JMenu menu=new JMenu("Plik"); JMenu processingimage=new JMenu("Transformacje obrazu"); JMenu about=new JMenu("O programie"); menuBar.add(menu); menuBar.add(processingimage); menuBar.add(about); JMenuItem openitem=new JMenuItem("Otworz Plik"); JMenuItem exititem=new JMenuItem("Wyjscie"); JMenuItem saveitem=new JMenuItem("Zapisz"); JMenuItem printitem=new JMenuItem("Drukuj"); JMenuItem bluritem=new JMenuItem("Blur"); JMenuItem sharpenitem=new JMenuItem("Sharpen"); JMenuItem brightenitem=new JMenuItem("Bright"); JMenuItem edgeitem=new JMenuItem("Edge"); JMenuItem negativeitem=new JMenuItem("Negative"); JMenuItem rotateitem=new JMenuItem("Rotate"); JMenuItem aboutitem=new JMenuItem("O programie"); menu.add(openitem); menu.add(saveitem); menu.add(printitem); menu.add(exititem); processingimage.add(bluritem); processingimage.add(sharpenitem); processingimage.add(brightenitem); processingimage.add(edgeitem); processingimage.add(negativeitem); processingimage.add(rotateitem); about.add(aboutitem); /*ramka do wyswietlania pogldadu zdjec label=new JLabel(); add(label);*/ openitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { openFile(); } }); saveitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { saveFile(formatName); } }); printitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { printFile(); } }); exititem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); bluritem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float weight=1.0f/9.0f; float[] elements=new float[9]; for(int i=0;i<9;i++)elements[i]=weight; convolve(elements); } }); brightenitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float a=1.1f; float b= -20.0f; RescaleOp op=new RescaleOp(a, b, null); filter(op); } }); edgeitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float[] elements= {0.0f, -1,0f, 0.0f, -1.0f, 4.f, -1,0f, 0.0f, -1.0f, 0.0f }; convolve (elements);} }); sharpenitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { float[] elements= { 0.0f, -1.0f, 0.0f, -1.0f, 5.f, -1.0f, 0.0f, -1.0f, 0.0f, }; convolve(elements); } }); negativeitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { 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); } }); rotateitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if(image==null)return; AffineTransform transform=new AffineTransform().getRotateInstance(Math.toRadians(10), image.getWidth()/4, image.getHeight()/4); AffineTransformOp op=new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); filter(op); } }); aboutitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JOptionPane.showMessageDialog(null, "Program stworzony na przedmiot " + "Warsztaty Programistyczne."); } }); } [b] //ZAPISZ PLIK public void saveFile(final String formatName) { JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { String name= f.getName().toLowerCase(); return name.endsWith(".jpg") || f.isDirectory(); } public String getDescription(){ return "Zapisz plik jako jpg"; } } ); int r=chooser.showSaveDialog(Ramka.this); if(r!=JFileChooser.APPROVE_OPTION)return; try { //image=ImageIO.write(chooser.getSelectedFile()); image=ImageIO.write(chooser.getSelectedFile()); } catch (IOException e){ JOptionPane.showMessageDialog(this, e); } //repaint(); } [/b] //metoda otwierajaca pliki graficzne public void openFile() { JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); 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 "Pliki graficzne"; } } ); int r=chooser.showOpenDialog(Ramka.this); if(r!=JFileChooser.APPROVE_OPTION)return; try { image=ImageIO.read(chooser.getSelectedFile()); } catch (IOException e){ JOptionPane.showMessageDialog(this, e); } repaint(); //fileName=chooser.getSelectedFile().getPath(); //label.setIcon(new ImageIcon(fileName)); } public void printFile() { PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(this); boolean ok = job.printDialog(); if (ok) { try { job.print(); } catch (PrinterException ex) { } } } private void filter(BufferedImageOp op) { if(image==null)return; BufferedImage filteredImage=new BufferedImage(image.getWidth(), image.getHeight(), image.getType()); op.filter(image, filteredImage); image=filteredImage; repaint(); } //odrysowanie ponowne panela private void convolve(float[] elements) { Kernel kernel=new Kernel(3, 3, elements); ConvolveOp op=new ConvolveOp(kernel); filter(op); } private JLabel label; private String fileName; private BufferedImage image; private String formatName; public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { throw new UnsupportedOperationException("Not supported yet."); } }
metoda openFile
public void openFile() { JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); 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 "Pliki graficzne"; } } ); int r=chooser.showOpenDialog(Ramka.this); if(r!=JFileChooser.APPROVE_OPTION)return; try { image=ImageIO.read(chooser.getSelectedFile()); } catch (IOException e){ JOptionPane.showMessageDialog(this, e); } repaint(); //fileName=chooser.getSelectedFile().getPath(); //label.setIcon(new ImageIcon(fileName)); }
Problematyczna metoda saveFile
public void saveFile(final String formatName) { JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { String name= f.getName().toLowerCase(); return name.endsWith(".jpg") || f.isDirectory(); } public String getDescription(){ return "Zapisz plik jako jpg"; } } ); int r=chooser.showSaveDialog(Ramka.this); if(r!=JFileChooser.APPROVE_OPTION)return; try { //image=ImageIO.write(chooser.getSelectedFile()); image=ImageIO.write(chooser.getSelectedFile()); } catch (IOException e){ JOptionPane.showMessageDialog(this, e); }
W metodzie saveFile problem jest z liniką kodu:image=ImageIO.write(chooser.getSelectedFile());
Na chłopski rozum tak chciałem zapisać wczytany wcześniej plik jednak write tu nie pasuje- netbeans mówi "cannot find symbol"(chodzi o write).
Liczę na pomoc.
Pozdrawiam.
Ostatnio edytowany przez sonic81 (2009-09-04 11:32:38)
Offline
Jaki wyjątek dostajesz? Wklej stack trace.
image=ImageIO.write(chooser.getSelectedFile());
Skąd ci to przyszło do głowy? Nie pisz domyślając się, sprawdź jakie parametry przyjmuje metoda ImageIO.write().
Offline
kamikaze napisał(-a):
Jaki wyjątek dostajesz? Wklej stack trace.
Kod:
image=ImageIO.write(chooser.getSelectedFile());Skąd ci to przyszło do głowy? Nie pisz domyślając się, sprawdź jakie parametry przyjmuje metoda ImageIO.write().
Teraz metoda saveFile wygląda tak:
public void saveFile(File file) { JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { String name= f.getName().toLowerCase(); return name.endsWith(".jpg") || f.isDirectory(); } public String getDescription(){ return "Zapisz plik jako"; } } ); int r=chooser.showSaveDialog(Ramka.this); if(r!=JFileChooser.SAVE_DIALOG)return; this.fileName = file.getName(); String suffix = fileName.substring(fileName.lastIndexOf('.') + 1); suffix = suffix.toLowerCase(); if (suffix.equals("jpg") ) { try { ImageIO.write(image, suffix, file); } catch (IOException e) { e.printStackTrace(); } } else { System.out.println("Blad:plik musi byc zapisany jako JPG"); } }
Teraz mam błąd w actionlistenerze
saveitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { saveFile(File file); } });
Jak wywołać poprawnie metodę saveFile w listenerze w tym przypadku?
Ok. Teraz lisener wygląda tak i nie ma już błędów:
saveitem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { saveFile(null); } });
Nie ma żadnych błędów, ale nie zapisuje w ogole pliku
Ostatnio edytowany przez sonic81 (2009-09-05 15:03:26)
Offline
Strony: 1