package tools; import com.shavenpuppy.jglib.Image; import java.awt.Transparency; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ComponentColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.image.Raster; import java.awt.image.WritableRaster; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.nio.ByteBuffer; import javax.imageio.ImageIO; /** * Class to load (some?) .jgimage files and/or convert them to PNGs. * @author joris */ public class JGImageUtil { public static void convert_jgimage_to_png(File infile, File outfile) { try { BufferedImage bim = load(infile); ImageIO.write(bim, "png", outfile); } catch (Exception e) { System.err.println("ERROR CONVERTING " + infile.getAbsolutePath()); e.printStackTrace(); } } public static Image convert_bufferedimage_to_jgimage(BufferedImage input) { DataBuffer db = input.getRaster().getDataBuffer(); DataBufferByte dbb = (DataBufferByte) db; Image img = new Image(input.getWidth(), input.getHeight(), Image.ABGR, dbb.getData()); return img; } public static BufferedImage load(File infile) throws FileNotFoundException, Exception { Image i = Image.read(new FileInputStream(infile)); ByteBuffer bb = i.getData(); ByteBuffer buffer = ByteBuffer.allocate(bb.capacity()); buffer.position(0); buffer.put(bb); BufferedImage bim = null; if (i.getType() == 1) { bim = convertType1(i, buffer); } if (i.getType() == 0) { bim = convertType0(i, buffer); } if (i.getType() == 4) { bim = convertType4(i, buffer); } if (i.getType() == 5) { bim = convertType5(i, buffer); } if (bim == null) { throw new Exception("Error! No converter made for type " + i.getType()); } return bim; } private static BufferedImage convertType0(Image i, ByteBuffer buffer) { ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{8, 8, 8}, false, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); WritableRaster raster = Raster.createInterleavedRaster(new DataBufferByte(buffer.array(), buffer.capacity()), i.getWidth(), i.getHeight(), i.getWidth() * 3, 3, new int[]{0, 1, 2}, null); BufferedImage bfImage = new BufferedImage(colorModel, raster, false, null); return bfImage; } private static BufferedImage convertType1(Image i, ByteBuffer buffer) { ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{8, 8, 8, 8}, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); WritableRaster raster = Raster.createInterleavedRaster(new DataBufferByte(buffer.array(), buffer.capacity()), i.getWidth(), i.getHeight(), i.getWidth() * 4, 4, new int[]{0, 1, 2, 3}, null); BufferedImage bfImage = new BufferedImage(colorModel, raster, false, null); return bfImage; } private static BufferedImage convertType4(Image i, ByteBuffer buffer) { ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{8, 8, 8, 8}, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); WritableRaster raster = Raster.createInterleavedRaster(new DataBufferByte(buffer.array(), buffer.capacity()), i.getWidth(), i.getHeight(), i.getWidth() * 4, 4, new int[]{1, 2, 3, 0}, null); BufferedImage bfImage = new BufferedImage(colorModel, raster, false, null); return bfImage; } private static BufferedImage convertType5(Image i, ByteBuffer buffer) { ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{8, 8, 8, 8}, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); WritableRaster raster = Raster.createInterleavedRaster(new DataBufferByte(buffer.array(), buffer.capacity()), i.getWidth(), i.getHeight(), i.getWidth() * 4, 4, new int[]{3, 2, 1, 0}, null); BufferedImage bfImage = new BufferedImage(colorModel, raster, false, null); return bfImage; } }