2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.sixth.e3d.renderer.raster;
7 public final class Color {
9 public static final Color RED = new Color(255, 0, 0, 255);
10 public static final Color GREEN = new Color(0, 255, 0, 255);
11 public static final Color BLUE = new Color(0, 0, 255, 255);
12 public static final Color YELLOW = new Color(255, 255, 0, 255);
13 public static final Color WHITE = new Color(255, 255, 255, 255);
14 public static final Color BLACK = new Color(0, 0, 0, 255);
15 public static final Color PURPLE = new Color(255, 0, 255, 255);
16 public static final Color TRANSPARENT = new Color(0, 0, 0, 0);
19 * Red component. 0-255.
24 * Green component. 0-255.
29 * Blue component. 0-255.
40 public Color(final Color parentColor) {
47 public Color(final double r, final double g, final double b, final double a) {
48 this.r = ensureByteLimit((int) (r * 255d));
49 this.g = ensureByteLimit((int) (g * 255d));
50 this.b = ensureByteLimit((int) (b * 255d));
51 this.a = ensureByteLimit((int) (a * 255d));
55 * @param colorHexCode color code in hex format.
56 * Supported formats are:
64 public Color(String colorHexCode) {
65 switch (colorHexCode.length()) {
67 r = parseHexSegment(colorHexCode, 0, 1) * 16;
68 g = parseHexSegment(colorHexCode, 1, 1) * 16;
69 b = parseHexSegment(colorHexCode, 2, 1) * 16;
74 r = parseHexSegment(colorHexCode, 0, 1) * 16;
75 g = parseHexSegment(colorHexCode, 1, 1) * 16;
76 b = parseHexSegment(colorHexCode, 2, 1) * 16;
77 a = parseHexSegment(colorHexCode, 3, 1) * 16;
81 r = parseHexSegment(colorHexCode, 0, 2);
82 g = parseHexSegment(colorHexCode, 2, 2);
83 b = parseHexSegment(colorHexCode, 4, 2);
88 r = parseHexSegment(colorHexCode, 0, 2);
89 g = parseHexSegment(colorHexCode, 2, 2);
90 b = parseHexSegment(colorHexCode, 4, 2);
91 a = parseHexSegment(colorHexCode, 6, 2);
94 throw new IllegalArgumentException("Unsupported color code: " + colorHexCode);
98 public Color(final int rgb) {
99 r = (rgb & 0xFF0000) >> 16;
100 g = (rgb & 0xFF00) >> 8;
105 public Color(final int r, final int g, final int b) {
109 public Color(final int r, final int g, final int b, final int a) {
110 this.r = ensureByteLimit(r);
111 this.g = ensureByteLimit(g);
112 this.b = ensureByteLimit(b);
113 this.a = ensureByteLimit(a);
116 private int parseHexSegment(String hexString, int start, int length) {
117 return Integer.parseInt(hexString.substring(start, start + length), 16);
121 * Ensure that color values are within allowed limits of 0 to 255.
123 private int ensureByteLimit(final int value) {
133 public boolean isTransparent() {
137 public java.awt.Color toAwtColor() {
138 return new java.awt.Color(r, g, b, a);
142 return toAwtColor().getRGB();
146 public boolean equals(Object o) {
147 if (this == o) return true;
148 if (o == null || getClass() != o.getClass()) return false;
150 Color color = (Color) o;
152 if (r != color.r) return false;
153 if (g != color.g) return false;
154 if (b != color.b) return false;
159 public int hashCode() {
161 result = 31 * result + g;
162 result = 31 * result + b;
163 result = 31 * result + a;