-
Type:
Bug
-
Resolution: Fixed
-
Priority:
P4
-
Affects Version/s: 5.0
-
Component/s: client-libs
-
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.
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.