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.app.BitWriter;
import uk.me.parabola.imgfmt.app.ImgFileWriter;

/**
 * Holds a bitmap image for the typ file.
 *
 * There are a number of different formats allowed.
 *
 * Based on code by Thomas Lußnig, but type and colour information separated out and
 * deals with more than just points.
 */

public class BitmapImage implements Image {

        private final ColourInfo colourInfo;
        private final String image;

        public BitmapImage(ColourInfo colourInfo, String image) {
                this.colourInfo = colourInfo;
                this.image = image;
        }

        public void write(ImgFileWriter writer) {

                final int bitSize = colourInfo.getBitsPerPixel();
                int cpp = colourInfo.getCharsPerPixel();

                int width = colourInfo.getWidth();
                int height = colourInfo.getHeight();

                int i = 0;
                for (int h = 0; h < height; h++) {
                        // Each row is padded to a byte boundary, creating a new bit writer for every
                        // row ensures that happens.
                        BitWriter bitWriter = new BitWriter();

                        for (int w = 0; w < width; w++) {
                                String idx = image.substring(i, i + cpp);
                                i += cpp;

                                int val = colourInfo.getIndex(idx);
                                bitWriter.putn(val, bitSize);
                        }
                        writer.put(bitWriter.getBytes(), 0, bitWriter.getLength());
                }
        }

        public int compare(BitmapImage a, BitmapImage b) {
                throw new UnsupportedOperationException();
                //if (a == null)
                //      return 1;
                //if (b == null)
                //      return -1;
                //if (a.typ < b.typ)
                //      return -1;
                //if (a.typ > b.typ)
                //      return 1;
                //if (a.dayNight < b.dayNight)
                //      return -1;
                //if (a.dayNight > b.dayNight)
                //      return 1;
                //return 0;
        }

}