Portability fix for Java2D demo's JPEGFlip code

XMLWordPrintable

    • b03
    • x86
    • linux
    • Not verified

      FULL PRODUCT VERSION :
      java version "1.5.0_06"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
      Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)


      ADDITIONAL OS VERSION INFORMATION :
      Linux amy 2.6.15-26-386 #1 PREEMPT Thu Aug 3 02:52:00 UTC 2006 i686 GNU/Linux


      A DESCRIPTION OF THE PROBLEM :
      JPEGFlip.java has a portability issue. It uses Sun-specific classes to load and store JPEGs, instead of using the standard imageio framework.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      $ grep import src/java2d/demos/Images/JPEGFlip.java | grep sun



      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      $ grep import src/java2d/demos/Images/JPEGFlip.java | grep sun

      and no output. ;)
      ACTUAL -
      $ grep import src/java2d/demos/Images/JPEGFlip.java | grep sun
      import com.sun.image.codec.jpeg.*;


      REPRODUCIBILITY :
      This bug can be reproduced always.

      CUSTOMER SUBMITTED WORKAROUND :
      Here is a fix for the source code as a unified diff:



      --- src/java2d/demos/Images/JPEGFlip.java 2005-11-10 22:38:35.000000000 +0100
      +++ src/java2d/demos/Images/JPEGFlip.java 2006-08-14 15:52:48.000000000 +0200
      @@ -41,10 +41,13 @@
       package java2d.demos.Images;

       import java.awt.*;
      -import com.sun.image.codec.jpeg.*;
       import java.awt.image.BufferedImage;
       import java.awt.image.DataBuffer;
       import java.awt.geom.GeneralPath;
      +import javax.imageio.*;
      +import javax.imageio.plugins.jpeg.*;
      +import javax.imageio.metadata.*;
      +import javax.imageio.stream.*;
       import java.io.*;
       import java2d.Surface;

      @@ -108,16 +111,24 @@
                   //File file = new File("images", "test.jpg");
                   //FileOutputStream out = new FileOutputStream(file);
                   ByteArrayOutputStream out = new ByteArrayOutputStream();
      - JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
      - JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
      - param.setQuality(1.0f, false);
      - encoder.setJPEGEncodeParam(param);
      - encoder.encode(bi);
      + MemoryCacheImageOutputStream image_output_stream = new MemoryCacheImageOutputStream(out);
      + ImageWriter encoder = (ImageWriter)ImageIO.getImageWritersByFormatName("JPEG").next();
      + JPEGImageWriteParam param = new JPEGImageWriteParam(null);
      +
      + param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
      + param.setCompressionQuality(1.0f);
      +
      + encoder.setOutput(image_output_stream);
      + encoder.write((IIOMetadata) null, new IIOImage(bi,null,null), param);
      +
      + out.close();

                   //FileInputStream in = new FileInputStream(file);
                   ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
      - JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
      - bi1 = decoder.decodeAsBufferedImage();
      + ImageReader decoder = ImageIO.getImageReader(encoder);
      + MemoryCacheImageInputStream image_input_stream = new MemoryCacheImageInputStream(in);
      + decoder.setInput(image_input_stream);
      + bi1 = decoder.read(0);
               } catch (Exception ex) {
                   g2.setColor(Color.red);
                   g2.drawString("write permissions on images/test.jpg?", 5, hh*2-5);

      I wish there was a way to attach patches to this thing, rather than hoping that the browser doesn't munge them.

            Assignee:
            Dmitri Trembovetski (Inactive)
            Reporter:
            Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: