Java examples for 2D Graphics:Color RGB
Returns the RGB equivalent of a given HSL (Hue/Saturation/Luminance) color.
/*/*from ww w .ja v a 2 s. c o m*/ * This is a fork of GHEAT_JAVA https://github.com/varunpant/GHEAT-JAVA * <p> * The MIT License * <p> * Copyright (c) 2014 Varun Pant * <p> * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * <p> * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * <p> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * <p> */ //package com.java2s; import java.awt.*; public class Main { public static void main(String[] argv) throws Exception { float h = 2.45678f; float s = 2.45678f; float l = 2.45678f; System.out.println(HSLtoRGB(h, s, l)); } /** * <p>Returns the RGB equivalent of a given HSL (Hue/Saturation/Luminance) * color.</p> * * @param h the hue component, between 0.0 and 1.0 * @param s the saturation component, between 0.0 and 1.0 * @param l the luminance component, between 0.0 and 1.0 * @return a new <code>Color</code> object equivalent to the HSL components */ public static Color HSLtoRGB(float h, float s, float l) { int[] rgb = HSLtoRGB(h, s, l, null); return new Color(rgb[0], rgb[1], rgb[2]); } /** * <p>Returns the RGB equivalent of a given HSL (Hue/Saturation/Luminance) * color. All three RGB components are integers between 0 and 255.</p> * * @param h the hue component, between 0.0 and 1.0 * @param s the saturation component, between 0.0 and 1.0 * @param l the luminance component, between 0.0 and 1.0 * @param rgb a pre-allocated array of ints; can be null * @return <code>rgb</code> if non-null, a new array of 3 ints otherwise * @throws IllegalArgumentException if <code>rgb</code> has a length lower * than 3 */ public static int[] HSLtoRGB(float h, float s, float l, int[] rgb) { if (rgb == null) { rgb = new int[3]; } else if (rgb.length < 3) { throw new IllegalArgumentException( "rgb array must have a length of" + " at least 3"); } if (h < 0) h = 0.0f; else if (h > 1.0f) h = 1.0f; if (s < 0) s = 0.0f; else if (s > 1.0f) s = 1.0f; if (l < 0) l = 0.0f; else if (l > 1.0f) l = 1.0f; int R, G, B; if (s - 0.01f <= 0.0f) { R = (int) (l * 255.0f); G = (int) (l * 255.0f); B = (int) (l * 255.0f); } else { float var_1, var_2; if (l < 0.5f) { var_2 = l * (1 + s); } else { var_2 = (l + s) - (s * l); } var_1 = 2 * l - var_2; R = (int) (255.0f * hue2RGB(var_1, var_2, h + (1.0f / 3.0f))); G = (int) (255.0f * hue2RGB(var_1, var_2, h)); B = (int) (255.0f * hue2RGB(var_1, var_2, h - (1.0f / 3.0f))); } rgb[0] = R; rgb[1] = G; rgb[2] = B; return rgb; } private static float hue2RGB(float v1, float v2, float vH) { if (vH < 0.0f) { vH += 1.0f; } if (vH > 1.0f) { vH -= 1.0f; } if ((6.0f * vH) < 1.0f) { return (v1 + (v2 - v1) * 6.0f * vH); } if ((2.0f * vH) < 1.0f) { return (v2); } if ((3.0f * vH) < 2.0f) { return (v1 + (v2 - v1) * ((2.0f / 3.0f) - vH) * 6.0f); } return (v1); } }