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