Rev 3408 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
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
;
}
}