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
contains:
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?
...jim
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