JDK-6345228 : ColorConvert loses color information even between the same ColorModels
  • Type: Bug
  • Component: client-libs
  • Sub-Component: 2d
  • Affected Version: 1.1.2
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2000
  • CPU: x86
  • Submitted: 2005-11-03
  • Updated: 2010-04-02
  • Resolved: 2005-11-03
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.5.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_01-b08)
Java HotSpot(TM) Client VM (build 1.5.0_01-b08, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows 2000 [Versi��n 5.00.2195]

A DESCRIPTION OF THE PROBLEM :
I've been struggling with ColorConvert for weeks to perform a quality RGB -> YCC -> RGB color conversion, and I've finally noticed it doesn't work right even when the destination ColorModel is the same that the source one. This is the code of my method:

public static PlanarImage convertingColorModel(PlanarImage pi, ColorModel cm) {
        ParameterBlock pb = new ParameterBlock();
        pb.addSource(pi).add(cm);
        
        ImageLayout il = new ImageLayout();
        il.setSampleModel(pi.getSampleModel());
        RenderingHints hints = new RenderingHints(javax.media.jai.JAI.KEY_IMAGE_LAYOUT, il);
        
        pi = JAI.create("ColorConvert", pb, hints);
        return pi;
}

I'm testing with an image with the following pixels values (I'll post just the firsts of the R and G bands):
R: 255 0 255 255 255 0 255 0
G: 255 0 255 0 255 255 255 0

If I call the previous method with the same image and image.getColorModel(), the colors change:

R: 252 0 252 253 252 22 252 0
G: 253 0 253 0 253 253 253 19

It produces perceptually insignificant changes, but critical errors when working with watermarking as I am...



STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Watch pixel values of a PlanarImage myImage
2. Call convertingColorModel (myImage, myImage.getColorModel())
3. Watch the new values

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I was expecting to get an almost identical pixel values (maybe some roundoff errors), something like the following:
R: 255 0 255 255 255 0 255 0
G: 255 0 255 0 255 255 255 0
ACTUAL -
R: 252 0 252 253 252 22 252 0
G: 253 0 253 0 253 253 253 19

REPRODUCIBILITY :
This bug can be reproduced always.