⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 color.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
  }  /**   * Converts from the HSB (hue, saturation, brightness) color model to the   * RGB (red, green, blue) color model. The hue may be any floating point;   * it's fractional portion is used to select the angle in the HSB model.   * The saturation and brightness must be between 0 and 1. The result is   * suitable for creating an RGB color with the one-argument constructor.   *   * @param hue the hue of the HSB value   * @param saturation the saturation of the HSB value   * @param brightness the brightness of the HSB value   * @return the RGB value   * @see #getRGB()   * @see #Color(int)   * @see ColorModel#getRGBdefault()   */  public static int HSBtoRGB(float hue, float saturation, float brightness)  {    if (saturation == 0)      return convert(brightness, brightness, brightness, 0);    if (saturation < 0 || saturation > 1 || brightness < 0 || brightness > 1)      throw new IllegalArgumentException();    hue = hue - (float) Math.floor(hue);    int i = (int) (6 * hue);    float f = 6 * hue - i;    float p = brightness * (1 - saturation);    float q = brightness * (1 - saturation * f);    float t = brightness * (1 - saturation * (1 - f));    switch (i)      {      case 0:        return convert(brightness, t, p, 0);      case 1:        return convert(q, brightness, p, 0);      case 2:        return convert(p, brightness, t, 0);      case 3:        return convert(p, q, brightness, 0);      case 4:        return convert(t, p, brightness, 0);      case 5:        return convert(brightness, p, q, 0);      default:        throw new InternalError("impossible");      }  }  /**   * Converts from the RGB (red, green, blue) color model to the HSB (hue,   * saturation, brightness) color model. If the array is null, a new one   * is created, otherwise it is recycled. The results will be in the range   * 0.0-1.0 if the inputs are in the range 0-255.   *   * @param red the red part of the RGB value   * @param green the green part of the RGB value   * @param blue the blue part of the RGB value   * @param array an array for the result (at least 3 elements), or null   * @return the array containing HSB value   * @throws ArrayIndexOutOfBoundsException of array is too small   * @see #getRGB()   * @see #Color(int)   * @see ColorModel#getRGBdefault()   */  public static float[] RGBtoHSB(int red, int green, int blue, float array[])  {    if (array == null)      array = new float[3];    // Calculate brightness.    int min;    int max;    if (red < green)      {        min = red;        max = green;      }    else      {        min = green;        max = red;      }    if (blue > max)      max = blue;    else if (blue < min)      min = blue;    array[2] = max / 255f;    // Calculate saturation.    if (max == 0)      array[1] = 0;    else      array[1] = ((float) (max - min)) / ((float) max);    // Calculate hue.    if (array[1] == 0)      array[0] = 0;    else      {        float delta = (max - min) * 6;        if (red == max)          array[0] = (green - blue) / delta;        else if (green == max)          array[0] = 1f / 3 + (blue - red) / delta;        else          array[0] = 2f / 3 + (red - green) / delta;        if (array[0] < 0)          array[0]++;      }    return array;  }  /**   * Returns a new instance of <code>Color</code> based on the specified   * HSB values. The hue may be any floating point; it's fractional portion   * is used to select the angle in the HSB model. The saturation and   * brightness must be between 0 and 1.   *   * @param hue the hue of the HSB value   * @param saturation the saturation of the HSB value   * @param brightness the brightness of the HSB value   * @return the new <code>Color</code> object   */  public static Color getHSBColor(float hue, float saturation,                                  float brightness)  {    return new Color(HSBtoRGB(hue, saturation, brightness), false);  }  /**   * Returns a float array with the red, green, and blue components, and the   * alpha value, in the default sRGB space, with values in the range 0.0-1.0.   * If the array is null, a new one is created, otherwise it is recycled.   *   * @param array the array to put results into (at least 4 elements), or null   * @return the RGB components and alpha value   * @throws ArrayIndexOutOfBoundsException if array is too small   */  public float[] getRGBComponents(float[] array)  {    if (array == null)      array = new float[4];    getRGBColorComponents(array);    // Stupid serialization issues require this check.    array[3] = (falpha == 0 && frgbvalue == null                ? ((getRGB() & ALPHA_MASK) >> 24) / 255f : falpha);    return array;  }  /**   * Returns a float array with the red, green, and blue components, in the   * default sRGB space, with values in the range 0.0-1.0. If the array is   * null, a new one is created, otherwise it is recycled.   *   * @param array the array to put results into (at least 3 elements), or null   * @return the RGB components   * @throws ArrayIndexOutOfBoundsException if array is too small   */  public float[] getRGBColorComponents(float[] array)  {    if (array == null)      array = new float[3];    else if (array == frgbvalue)      return array; // Optimization for getColorComponents(float[]).    if (frgbvalue == null)      {        // Do not inline getRGB() to this.value, because of SystemColor.        int value = getRGB();        frgbvalue = new float[] { ((value & RED_MASK) >> 16) / 255f,                                  ((value & GREEN_MASK) >> 8) / 255f,                                  (value & BLUE_MASK) / 255f };      }    array[0] = frgbvalue[0];    array[1] = frgbvalue[1];    array[2] = frgbvalue[2];    return array;  }  /**   * Returns a float array containing the color and alpha components of this   * color in the ColorSpace it was created with (the constructors which do   * not take a ColorSpace parameter use a default sRGB ColorSpace). If the   * array is null, a new one is created, otherwise it is recycled, and must   * have at least one more position than components used in the color space.   *   * @param array the array to put results into, or null   * @return the original color space components and alpha value   * @throws ArrayIndexOutOfBoundsException if array is too small   */  public float[] getComponents(float[] array)  {    int numComponents = cs == null ? 3 : cs.getNumComponents();    if (array == null)      array = new float[1 + numComponents];    getColorComponents(array);    // Stupid serialization issues require this check.    array[numComponents] = (falpha == 0 && frgbvalue == null                            ? ((getRGB() & ALPHA_MASK) >> 24) / 255f : falpha);    return array;  }  /**   * Returns a float array containing the color components of this color in   * the ColorSpace it was created with (the constructors which do not take   * a ColorSpace parameter use a default sRGB ColorSpace). If the array is   * null, a new one is created, otherwise it is recycled, and must have at   * least as many positions as used in the color space.   *   * @param array the array to put results into, or null   * @return the original color space components   * @throws ArrayIndexOutOfBoundsException if array is too small   */  public float[] getColorComponents(float[] array)  {    int numComponents = cs == null ? 3 : cs.getNumComponents();    if (array == null)      array = new float[numComponents];    if (fvalue == null) // If fvalue is null, cs should be null too.      fvalue = getRGBColorComponents(frgbvalue);    System.arraycopy(fvalue, 0, array, 0, numComponents);    return array;  }  /**   * Returns a float array containing the color and alpha components of this   * color in the given ColorSpace. If the array is null, a new one is   * created, otherwise it is recycled, and must have at least one more   * position than components used in the color space.   *   * @param space the color space to translate to   * @param array the array to put results into, or null   * @return the color space components and alpha value   * @throws ArrayIndexOutOfBoundsException if array is too small   * @throws NullPointerException if space is null   */  public float[] getComponents(ColorSpace space, float[] array)  {    int numComponents = space.getNumComponents();    if (array == null)      array = new float[1 + numComponents];    getColorComponents(space, array);    // Stupid serialization issues require this check.    array[numComponents] = (falpha == 0 && frgbvalue == null                            ? ((getRGB() & ALPHA_MASK) >> 24) / 255f : falpha);    return array;  }  /**   * Returns a float array containing the color components of this color in   * the given ColorSpace. If the array is null, a new one is created,   * otherwise it is recycled, and must have at least as many positions as   * used in the color space.   *   * @param space the color space to translate to   * @return the color space components   * @throws ArrayIndexOutOfBoundsException if array is too small   * @throws NullPointerException if space is null   */  public float[] getColorComponents(ColorSpace space, float[] array)  {    float[] components = space.fromRGB(getRGBColorComponents(frgbvalue));    if (array == null)      return components;    System.arraycopy(components, 0, array, 0, components.length);    return array;  }  /**   * Returns the color space of this color. Except for the constructor which   * takes a ColorSpace argument, this will be an implementation of   * ColorSpace.CS_sRGB.   *   * @return the color space   */  public ColorSpace getColorSpace()  {    return cs == null ? ColorSpace.getInstance(ColorSpace.CS_sRGB) : cs;  }  /**   * Returns a paint context, used for filling areas of a raster scan with   * this color. Since the color is constant across the entire rectangle, and   * since it is always in sRGB space, this implementation returns the same   * object, regardless of the parameters. Subclasses, however, may have a   * mutable result.   *   * @param cm the requested color model   * @param deviceBounds the bounding box in device coordinates, ignored   * @param userBounds the bounding box in user coordinates, ignored   * @param xform the bounds transformation, ignored   * @param hints any rendering hints, ignored   * @return a context for painting this solid color   */  public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,                                    Rectangle2D userBounds,                                    AffineTransform xform,                                    RenderingHints hints)  {    if (context == null || !context.getColorModel().equals(cm))      context = new ColorPaintContext(cm,value);    return context;  }  /**   * Returns the transparency level of this color.   *   * @return one of {@link #OPAQUE}, {@link #BITMASK}, or {@link #TRANSLUCENT}   */  public int getTransparency()  {    // Do not inline getRGB() to this.value, because of SystemColor.    int alpha = getRGB() & ALPHA_MASK;    return alpha == (255 << 24) ? OPAQUE : alpha == 0 ? BITMASK : TRANSLUCENT;  }  /**   * Converts float values to integer value.   *   * @param red the red value   * @param green the green value   * @param blue the blue value   * @param alpha the alpha value   * @return the integer value made of 8-bit sections   * @throws IllegalArgumentException if parameters are out of range 0.0-1.0   */  private static int convert(float red, float green, float blue, float alpha)  {    if (red < 0 || red > 1 || green < 0 || green > 1 || blue < 0 || blue > 1        || alpha < 0 || alpha > 1)      throw new IllegalArgumentException("Bad RGB values");    int redval = Math.round(255 * red);    int greenval = Math.round(255 * green);    int blueval = Math.round(255 * blue);    int alphaval = Math.round(255 * alpha);    return (alphaval << 24) | (redval << 16) | (greenval << 8) | blueval;  }} // class Color

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -