Re: saving images on a linux box

Hi Curtis,

It worked perfectly.

Thanks,
Ricardo

----- Original Message ----- 
From: "Curtis Rueden" <curtis@xxxxxxxxxxxxx>
To: "Ricardo Mantilla" <ricardo@xxxxxxxxxxxxxxxxxx>
Sent: Monday, June 23, 2003 4:26 PM
Subject: Re: saving images on a linux box


> Hi Ricardo,
>
> That JPEG logic uses the com.sun.image.codec.jpeg package.
> Sun has always stated that the com.sun.* packages are not
> stable or supported (that is, they are internal packages
> that strictly speaking, we developers are not supposed to
> be using extensively).
>
> So, the problem is likely that there is an issue with that
> package on J2sdk1.4.1_03 on Linux. First, I suggest trying
> J2sdk1.4.2 beta, since I know it fixes lots of bugs. If
> that doesn't work, you could use the ImageJ functionality
> that is included with the VisAD distribution:
>
>   import ij.io.FileSaver;
>   ...
>   Image img = display.getImage();
>   File file = new File("outfile.jpg");
>   FileSaver saver = new FileSaver(new ImagePlus("null", img));
>   saver.saveAsJpeg(file);
>
> -Curtis
>
> At 11:47 AM 6/23/2003, you wrote:
> >Hi all,
> >
> >I am having problems to save a capured image ( display.getImage() ) on my
Linux box the code I am using is the same that is implemented for the
FancySSCell and BasicSSCell.captureImage();
> >
> >The code works fine on my windows Laptop but when I use the very same
code on my Linux Box I get the following exception:
> >
> >java.lang.ClassCastException
> >        at
sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:40
5)
> >        at
sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:22
8)
> >        at AspectRatio.saveImage(AspectRatio.java:244)
> >        at AspectRatio.access$100(AspectRatio.java:41)
> >        at AspectRatio$4.run(AspectRatio.java:215)
> >        at java.lang.Thread.run(Thread.java:536)
> >
> >(Note:    The exception is reported in the line encoder.encode(image); of
the attached code)
> >
> >I am using the lastest J2sdk1.4.1_03 on both my Windows and Linux
machine.
> >
> >This is the code that I fire when I press a button:
> >
> >    private void snapshotActionPerformed(java.awt.event.ActionEvent evt)
{
> >        javax.swing.JFileChooser fc=new javax.swing.JFileChooser();
> >        javax.swing.filechooser.FileFilter jpgFilter = new
visad.util.ExtensionFileFilter("jpg","JPEG File");
> >        fc.addChoosableFileFilter(jpgFilter);
> >        fc.showSaveDialog(this);
> >
> >        if(fc.getSelectedFile() == null) return;
> >
> >        final java.io.File f=fc.getSelectedFile();
> >        Runnable captureImage = new Runnable() {
> >          public void run() {
> >            String msg = "Could not save image snapshot to file \"" +
f.getName() +
> >              "\" in JPEG format. ";
> >            try {
> >              saveImage(f);
> >            }
> >            catch (visad.VisADException exc) {
> >              msg = msg + "An error occurred: " + exc.getMessage();
> >              javax.swing.JOptionPane.showMessageDialog(mainFrame, msg,
"Error saving data",
> >                javax.swing.JOptionPane.ERROR_MESSAGE);
> >            }
> >            catch (IOException exc) {
> >              msg = msg + "An I/O error occurred: " + exc.getMessage();
> >              javax.swing.JOptionPane.showMessageDialog(mainFrame, msg,
"Error saving data",
> >                javax.swing.JOptionPane.ERROR_MESSAGE);
> >            }
> >          }
> >        };
> >        Thread t = new Thread(captureImage);
> >        t.start();
> >    }
> >
> >    private void saveImage(java.io.File f) throws visad.VisADException,
java.io.IOException {
> >        java.awt.image.BufferedImage image = display.getImage();
> >
> >        try {
> >            if(!f.getName().endsWith(".jpg")){
> >                f= new java.io.File(f.getPath()+".jpg");
> >            }
> >            JPEGEncodeParam param
JPEGCodec.getDefaultJPEGEncodeParam(image);
> >            param.setQuality(1.0f, true);
> >            FileOutputStream fout = new FileOutputStream(f);
> >            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fout);
> >            encoder.encode(image);
> >            fout.close();
> >        }catch (NoClassDefFoundError err) {
> >            System.err.println("Error: "+err);
> >            err.printStackTrace();
> >        }
> >    }
> >
> >Thanks in advance for the help you can provide me with,
> >
> >Ricardo