package uk.me.parabola.imgfmt.app.typ;
import uk.me.parabola.imgfmt.FormatException;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
public class Rgb {
private final int b;
private final int g;
private final int r;
private final int a;
public Rgb(int r, int g, int b, int a) {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
public Rgb(int r, int g, int b) {
this(r, g, b, 0xff);
}
/**
* Initialise from a string.
*
* The format is #RRGGBB and without the '#'. You can also append
* an alpha value. FF for fully opaque, and 00 for fully transparent.
* The typ file only deals with fully transparent.
*
* @param in The string form of the color.
*/
public Rgb(String in) {
String colour = in;
if (colour.startsWith("#"))
colour = colour.substring(1);
r = Integer.parseInt(colour.substring(0, 2), 16);
g = Integer.parseInt(colour.substring(2, 4), 16);
b = Integer.parseInt(colour.substring(4, 6), 16);
if (colour.length() > 6)
a = Integer.parseInt(colour.substring(6, 8), 16);
else
a = 0xff;
}
/**
* Create a new Rgb from the given one, adding the given alpha channel value.
*/
public Rgb(Rgb rgb, int alpha) {
this(rgb.r, rgb.g, rgb.b, alpha);
}
public void write(ImgFileWriter writer, byte type) {
if (type != 0x10)
throw new FormatException("Invalid color deep");
writer.put((byte) b);
writer.put((byte) g);
writer.put((byte) r);
}
public boolean isTransparent() {
return a == 0;
}
public String toString() {
if (a == 0xff)
return String.format("#%02x%02x%02x", r, g, b);
else
return String.format("#%02x%02x%02x%02x", r, g, b, a);
}
public int getB() {
return b;
}
public int getG() {
return g;
}
public int getR() {
return r;
}
public int getA() {
return a;
}
}