Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.

Writing images to file and copying to the clipboard with jdk 1.4

I noticed that when I use the code suggested in several past emails, as shown 
below, I get an JPEG image file that is the right size, but only a black image 
is written.

import com.sun.image.codec.jpeg.*;
    ...

//this is run in its own thread...

    DisplayImpl display = ...;
    ...
    BufferedImage image = display.getImage();
    JPEGEncodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(image);
    param.setQuality(1.0f, true);
    FileOutputStream fout = new FileOutputStream(f);
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fout);
    encoder.encode(image, param);
    fout.close();
 
I am using jdk1.4 on W2K platform, but I also tried it with jdk1.3 and the same 
problem occurs.

If instead I use the following with jdk1.4, I can paste to the clipboard and 
the image appears fine in other programs (i.e. Word, PowerPoint, etc.).

//this is run in its own thread...

        BufferedImage image = display.getImage();
        Icon icon = new ImageIcon(image);
        final JLabel label = new JLabel(icon);
        label.setTransferHandler(new ImageSelection());
        Toolkit kit = Toolkit.getDefaultToolkit();
        final Clipboard clipboard = kit.getSystemClipboard();

        TransferHandler handler = label.getTransferHandler();
        handler.exportToClipboard(label, clipboard, TransferHandler.COPY);
   
jkd1.4 has a new ImageIO class, which simplifies the top example to a single 
line:

     import javax.imageio.ImageIO;

     BufferedImage image = ...;
     File file = ...;
     ImageIO.write(image, "JPEG", file);

However, this doesn't work either.  I checked a few newsgroups, and I think it 
may be a JPEG encoding error in the Sun code.  What does work well is:

     BufferedImage image = ...;
     File file = ...;
     ImageIO.write(image, "PNG", file);

(I prefer PNG over JPEG's anyway, since I use GIMP for image rendering)

Hopefully this may save a few of you some time, if you have the luxury of using 
java 1.4.  I haven't yet checked if other image formats work okay with the 
ImageIO class

Steve Potts, Ph.D.
Informatics Research Scientist
SurroMed
Mountain View, CA
spotts@xxxxxxxxxxxx
(650) 230-1822





  • 2002 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: