[OpenJDK 2D-Dev] Review Request for JDK-7116979 : Unexpected pixel colour when converting images to TYPE_BYTE_INDEXED

Jim Graham james.graham at oracle.com
Thu Feb 11 22:35:23 UTC 2016

Hi Jayathirth,

Did you do any performance analysis of this change?  You are adding 6 
tests and multiple branches to per-pixel code.

The effectiveness of this technique depends on the colormap that we have 
set up.  For the BufferedImage.TYPE_INDEXED constructor we produce a 
fairly nice colormap, but if someone creates a custom colormap then the 
colors could be anything.  We create a decent inversion for just about 
any colormap, but that doesn't mean that using only "the best match for 
solid red" will produce a better result for a dithered approximation for 
red.  It is true that if there is a really good match for red then we 
should just use that, but if there are no direct matches for red then we 
may choose to paint a red region with solid orange even though there is 
another color in the colormap that when mixed with orange approximates a 
red tone better.  For example, if a colormap contains no pure red, but 

240, 20,  0
240,  0, 20

(I'm not sure if 20 is within our current error deltas that we use for 
dithering, but this is an example not a test case.)

Then using one of these alone might skew the color towards orange or 
purple.  Using both together in a dither pattern might keep the overall 
hue impression as red, but with a small amount of noise in its saturation.

What types of colormaps was this tested with?


On 2/11/16 6:37 AM, Jayathirth D V wrote:
> Hi,
> _Please review the following fix in JDK9:_
> __
> Bug : https://bugs.openjdk.java.net/browse/JDK-7116979
> Webrev : http://cr.openjdk.java.net/~jdv/7116979/webrev.00/
> Issue : When Image containing black pixels are converted from any format
> to Byte Indexed format some of the pixels are not black. They are
> following pattern similar to dithering.
> Root cause : When we convert any format type to ByteIndexed we are
> adding Error delta values to R,G,B components using dithering indices.
> This is causing some pixels values to not point to proper index in color
> table.
> Solution : There is no need to add error delta for primary colors
> containing basic values in R,G,B components. Exclude such pixels from
> delta addition.
> Thanks,
> Jay

More information about the 2d-dev mailing list