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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-09-04 11:25:35

  sonic81 - Użytkownik

sonic81
Użytkownik
Zarejestrowany: 2006-11-03

Program w Javie-klasa ImageIO i problem z zapisem pliku

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.

Kod:

/* 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

Kod:

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

Kod:

 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

 

#2  2009-09-04 12:59:44

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Program w Javie-klasa ImageIO i problem z zapisem pliku

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().

Offline

 

#3  2009-09-05 11:35:40

  sonic81 - Użytkownik

sonic81
Użytkownik
Zarejestrowany: 2006-11-03

Re: Program w Javie-klasa ImageIO i problem z zapisem pliku

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:

Kod:

 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

Kod:

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:

Kod:

 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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)