Name: jk109818 Date: 10/07/2002
FULL PRODUCT VERSION :
java version "1.3.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02)
Java HotSpot(TM) Client VM (build 1.3.1_02-b02, mixed mode)
Also on
java version "1.4.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_01-b03)
Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode)
AND
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
FULL OPERATING SYSTEM VERSION :
Windows 98 [Version 4.10.2222]
Mac OS X.2
ADDITIONAL OPERATING SYSTEMS :
Believed to apply to all OSes.
A DESCRIPTION OF THE PROBLEM :
For small negative values of hue, HSBtoRGB returns black when it
should return red.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Example:
import java.awt.Color;
public class Test
{
public static void main(String[] args)
{
int rgb = 0xffffff & Color.HSBtoRGB(-0.00000002f, 1.0f, 1.0f);
System.out.println(Integer.toString(rgb, 16));
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expected result: ff0000 (bright red)
Actual result: 0
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
See above.
---------- END SOURCE ----------
CUSTOMER WORKAROUND :
1. (User) Create a wrapper:
static int myHSBtoRGB(float hue, float saturation, float
brightness)
{
if (hue < 0.0f && hue >= -0.0000001f)
{
hue = 0.0f;
}
return Color.HSBtoRGB(hue, saturation, brightness);
}
2. (Sun) The problem lies in the following line of code in the
HSBtoRGB source:
float h = (hue - (float)Math.floor(hue)) * 6.0f;
Math.floor(hue) returns -1.0f, which is sufficiently larger than the
hue that (hue - (float)Math.floor(hue)) evaluates to 1.0f. Thus the
later switch on (int)h, failing to find a case 6, defaults to leaving r, g,
b as zeroes.
There are several possible fixes, and I'm not much of a
numerical analyst so won't venture an opinion on the best way.
One possibility is to insert a line immediately after the faulty line:
if (h >= 6.0f) h -= 6.0f;
(Review ID: 165289)
======================================================================
|