okd
asked on
Converting HSBtoRGB into the domain [0,300]
Hi,
I want to convert the scalar value into RGB color value. That is, I want to convert HSL color space to RGB values. In the HSL color space, I have taken hue as the scalar value, saturation=1 and brightness=0.5. Then, I want to convert it to RGB.
Using the method below, I am getting the same value of the RGB color for both max and min scalar values. Because it maps to the domain [0, 360]. I want to map it into [0,300]. That is minimum scalar vaue will be 0 and the maximum scalar value will be 300.
I could not do this. Can anyone please tell me how to do this.
Thanks in advance.
okd
----
// The complete java class with method
import java.awt.*;
class RGBConvert {
static float[] HSB_to_RGB1(float hue) {
float saturation1 = 1.0f;
float brightness1 = 0.5f;
float[] rgb1;
rgb1 = new float[3];
Color color;
color = new Color (Color.HSBtoRGB(hue, saturation1, brightness1));
rgb1[0] = 1.0f - (float)color.getRed()/ 256 ;
rgb1[1] = 1.0f - (float)color.getGreen()/ 256 ;
rgb1[2] = 1.0f - (float)color.getBlue()/ 256 ;
System.out.println(rgb1[0] + " "+ rgb1[1]+ " " + rgb1[2]);
return rgb1;
}
public static void main(String args[]) {
float x =1.0f;
//float x =0.0f;
HSB_to_RGB1(x);
}
}
I want to convert the scalar value into RGB color value. That is, I want to convert HSL color space to RGB values. In the HSL color space, I have taken hue as the scalar value, saturation=1 and brightness=0.5. Then, I want to convert it to RGB.
Using the method below, I am getting the same value of the RGB color for both max and min scalar values. Because it maps to the domain [0, 360]. I want to map it into [0,300]. That is minimum scalar vaue will be 0 and the maximum scalar value will be 300.
I could not do this. Can anyone please tell me how to do this.
Thanks in advance.
okd
----
// The complete java class with method
import java.awt.*;
class RGBConvert {
static float[] HSB_to_RGB1(float hue) {
float saturation1 = 1.0f;
float brightness1 = 0.5f;
float[] rgb1;
rgb1 = new float[3];
Color color;
color = new Color (Color.HSBtoRGB(hue, saturation1, brightness1));
rgb1[0] = 1.0f - (float)color.getRed()/ 256 ;
rgb1[1] = 1.0f - (float)color.getGreen()/ 256 ;
rgb1[2] = 1.0f - (float)color.getBlue()/ 256 ;
System.out.println(rgb1[0]
return rgb1;
}
public static void main(String args[]) {
float x =1.0f;
//float x =0.0f;
HSB_to_RGB1(x);
}
}
ASKER
I have multiplied the final result by 5/6. Still the maximum and the minimum value is same.
I made it below:
rgb1[0] = 1.0f - (float)color.getRed()*5/(2 56*6) ;
rgb1[1] = 1.0f - (float)color.getGreen()*5/ (256*6) ;
rgb1[2] = 1.0f - (float)color.getBlue()*5/( 256*6) ;
Result :
For hue= 1.0 0.16992188 1.0 1.0
For hue= 0.0 0.16992188 1.0 1.0
Please help.
I made it below:
rgb1[0] = 1.0f - (float)color.getRed()*5/(2
rgb1[1] = 1.0f - (float)color.getGreen()*5/
rgb1[2] = 1.0f - (float)color.getBlue()*5/(
Result :
For hue= 1.0 0.16992188 1.0 1.0
For hue= 0.0 0.16992188 1.0 1.0
Please help.
ASKER
I did it. I am sorry. I was always trying to multiply the rgb[0] by 5/6. Actually, I have to multiply all hue values by 5/6 to map it into [0, 300].
Once again thanks a lot.
Once again thanks a lot.
this code
// The complete java class with method
import java.awt.*;
class RGBConvert {
static float[] HSB_to_RGB1(float hue)
{
// float hue = 1.0f;
float saturation1 = 1.0f;
float brightness1 = 0.5f;
float[] rgb1;
rgb1 = new float[3];
Color color = Color.getHSBColor(hue, saturation1, brightness1);
// System.out.println(color.g etRed() + ", "+ color.getGreen()+ ", " + color.getBlue());
rgb1[0] = ((float)color.getRed())/ 256 ;
rgb1[1] = ((float)color.getGreen())/ 256 ;
rgb1[2] = ((float)color.getBlue())/ 256 ;
System.out.println(rgb1[0] + ", "+ rgb1[1]+ ", " + rgb1[2]);
return rgb1;
}
public static void main(String args[])
{
float x =1.0f;
HSB_to_RGB1(x);
x =0.75f;
HSB_to_RGB1(x);
x =0.5f;
HSB_to_RGB1(x);
x =0.25f;
HSB_to_RGB1(x);
x =0f;
HSB_to_RGB1(x);
}
}
returns
0.49609375, 0.0, 0.0
0.24609375, 0.0, 0.49609375
0.0, 0.49609375, 0.49609375
0.24609375, 0.49609375, 0.0
0.49609375, 0.0, 0.0
so it's quite normal that you receive equal colors for hue = 0 and hue = 1.
// The complete java class with method
import java.awt.*;
class RGBConvert {
static float[] HSB_to_RGB1(float hue)
{
// float hue = 1.0f;
float saturation1 = 1.0f;
float brightness1 = 0.5f;
float[] rgb1;
rgb1 = new float[3];
Color color = Color.getHSBColor(hue, saturation1, brightness1);
// System.out.println(color.g
rgb1[0] = ((float)color.getRed())/ 256 ;
rgb1[1] = ((float)color.getGreen())/
rgb1[2] = ((float)color.getBlue())/ 256 ;
System.out.println(rgb1[0]
return rgb1;
}
public static void main(String args[])
{
float x =1.0f;
HSB_to_RGB1(x);
x =0.75f;
HSB_to_RGB1(x);
x =0.5f;
HSB_to_RGB1(x);
x =0.25f;
HSB_to_RGB1(x);
x =0f;
HSB_to_RGB1(x);
}
}
returns
0.49609375, 0.0, 0.0
0.24609375, 0.0, 0.49609375
0.0, 0.49609375, 0.49609375
0.24609375, 0.49609375, 0.0
0.49609375, 0.0, 0.0
so it's quite normal that you receive equal colors for hue = 0 and hue = 1.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
> I want to map it into [0,300].
why don't you multiply your final result with 5/6