package org.sunflow.image;
public final class ColorFactory {
/**
* Return the name of the internal color space. This string can be used
* interchangeably with
* null
in the following methods.
*
* @return internal colorspace name
*/
public static String getInternalColorspace() {
return "sRGB linear";
}
/**
* Checks to see how many values are required to specify a color using the
* given colorspace. This number can be variable for spectrum colors, in
* which case the returned value is -1. If the colorspace name is invalid,
* this method returns -2. No exception is thrown. This method is intended
* for parsers that want to know how many floating values to retrieve from a
* file.
*
* @param colorspace
* @return number of floating point numbers expected, -1 for any, -2 on
* error
*/
public static int getRequiredDataValues(String colorspace) {
if (colorspace == null) {
return 3;
}
if (colorspace.equals("sRGB nonlinear")) {
return 3;
} else if (colorspace.equals("sRGB linear")) {
return 3;
} else if (colorspace.equals("XYZ")) {
return 3;
} else if (colorspace.equals("blackbody")) {
return 1;
} else if (colorspace.startsWith("spectrum")) {
return -1;
} else {
return -2;
}
}
/**
* Creates a color value in the renderer's internal color space from a
* string (representing the color space name) and an array of floating point
* values. If the colorspace string is null, we assume the data was supplied
* in internal space. This method does much error checking and may throw a
* {@link RuntimeException} if its parameters are not consistent. Here are
* the currently supported color spaces:
*
"sRGB nonlinear"
- requires 3 values"sRGB linear"
- requires 3 values"XYZ"
- requires 3 valuesblackbody
- requires 1 value (temperature in
* Kelvins)spectrum [min] [max]
- any number of values (must be
* >0), [start] and [stop] is the range over which the spectrum is defined
* in nanometers.