Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

131
LINES

< > BotCompany Repo | #1015058 // RGB - red/green/blue triple with float precision

JavaX fragment (include) [tags: use-pretranspiled]

Transpiled version (9449L) is out of date.

static class RGB {
  // usually in range [0, 1]
  public float r, g, b; // can't be final cause persistence
  
  *() {}
  
  public RGB(float brightness) {
    r = g = b = brightness;
  }
  
  public RGB(float r, float g, float b) {
    this.r = r;
    this.g = g;
    this.b = b;
  }

  public RGB(double r, double g, double b) {
    this.r = (float) r;
    this.g = (float) g;
    this.b = (float) b;
  }
  
  public RGB(double[] rgb) {
    this(rgb[0], rgb[1], rgb[2]);
  }

  public RGB(int rgb) {
    r = rgbRed(rgb)/255f;
    g = rgbGreen(rgb)/255f;
    b = rgbBlue(rgb)/255f;
  }
  
  public RGB(double brightness) {
    this((float) brightness);
  }

  public RGB(Color color) {
    r = color.getRed()/255f;
    g = color.getGreen()/255f;
    b = color.getBlue()/255f;
  }

  // TODO: 3-char version
  public RGB(S hex) {
    int i = l(hex)-6;
    r = Integer.parseInt(hex.substring(i, i+2), 16)/255f;
    g = Integer.parseInt(hex.substring(i+2, i+4), 16)/255f;
    b = Integer.parseInt(hex.substring(i+4, i+6), 16)/255f;
  }

  public float getComponent(int i) {
    return i == 0 ? r : i == 1 ? g : b;
  }

  public int getInt(int i) {
    ret i == 0 ? redInt() : i == 1 ? greenInt() : blueInt();
  }
  
  public Color getColor() {
    return new Color(clampZeroToOne(r), clampZeroToOne(g), clampZeroToOne(b));
  }

  public static RGB newSafe(float r, float g, float b) {
    return new RGB(Math.max(0, Math.min(1, r)), Math.max(0, Math.min(1, g)), Math.max(0, Math.min(1, b)));
  }

  int asInt() { return getColor().getRGB() & 0xFFFFFF; }
  int getInt() { return getColor().getRGB() & 0xFFFFFF; }
  int asIntWithAlpha() { return rgbInt(redInt(), greenInt(), blueInt()) | 0xFF000000; }

  public float getBrightness aka brightness() {
    return (r+g+b)/3.0f;
  }

  public String getHexString() {
    return Integer.toHexString(asInt() | 0xFF000000).substring(2).toUpperCase();
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof RGB)) return false;

    RGB rgb = (RGB) o;

    if (Float.compare(rgb.b, b) != 0) return false;
    if (Float.compare(rgb.g, g) != 0) return false;
    if (Float.compare(rgb.r, r) != 0) return false;

    return true;
  }

  @Override
  public int hashCode() {
    int result = (r != +0.0f ? Float.floatToIntBits(r) : 0);
    result = 31 * result + (g != +0.0f ? Float.floatToIntBits(g) : 0);
    result = 31 * result + (b != +0.0f ? Float.floatToIntBits(b) : 0);
    return result;
  }

  public boolean isBlack() {
    return r == 0f && g == 0f && b == 0f;
  }

  public boolean isWhite() {
    return r == 1f && g == 1f && b == 1f;
  }
  
  // This is hyperprecise
  bool isGrayscale() {
    ret r == g && g == b;
  }

  public String toString() {
    //return getHexString();
    ret isGrayscale() ? formatChannel(r)
      : spaceCombine("RGB", formatChannel(r), formatChannel(g), formatChannel(b));
  }
  
  S formatChannel(float value) {
    ret formatDouble(value, 2);
  }
  
  int redInt() { ret iround(r*255); }
  int greenInt() { ret iround(g*255); }
  int blueInt() { ret iround(b*255); }
  
  static float brightnessToFloat(int brightness) { ret brightness/255f; }
  
  RGB cloneMe() { ret new RGB(r, g, b); }
}

Author comment

Began life as a copy of #1002470

download  show line numbers  debug dex  old transpilations   

Travelled to 18 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mowyntqkapby, mqqgnosmbjvj, onxytkatvevr, podlckwnjdmb, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, whxojlpjdney, xrpafgyirdlv

No comments. add comment

Snippet ID: #1015058
Snippet name: RGB - red/green/blue triple with float precision
Eternal ID of this version: #1015058/23
Text MD5: 8f5d6e8591810f73086dd65508c323f9
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2022-08-21 12:41:05
Source code size: 3353 bytes / 131 lines
Pitched / IR pitched: No / No
Views / Downloads: 535 / 1952
Version history: 22 change(s)
Referenced in: [show references]