Subversion Repositories mkgmap

Rev

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;
        }
}