diff --git a/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java b/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java index 7272ab15..e3da19cd 100644 --- a/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java +++ b/src/java/com/threerings/media/tile/bundle/tools/TileSetBundler.java @@ -132,6 +132,18 @@ public class TileSetBundler public TileSetBundler (File configFile) throws IOException { + this(configFile, false); + } + + /** + * Constructs a tileset bundler with the specified bundler config + * file and whether to keep pngs as-is or if not, re-encode them. + */ + public TileSetBundler (File configFile, boolean keepRawPngs) + throws IOException + { + _keepRawPngs = keepRawPngs; + // we parse our configuration with a digester Digester digester = new Digester(); @@ -340,7 +352,7 @@ public class TileSetBundler File target, TileSetBundle bundle, ImageProvider improv, String imageBase, long newestMod) throws IOException { - return createBundleJar(target, bundle, improv, imageBase); + return createBundleJar(target, bundle, improv, imageBase, _keepRawPngs); } /** @@ -353,7 +365,8 @@ public class TileSetBundler * ObjectTileSet tilesets. */ public static boolean createBundleJar ( - File target, TileSetBundle bundle, ImageProvider improv, String imageBase) + File target, TileSetBundle bundle, ImageProvider improv, String imageBase, + boolean keepRawPngs) throws IOException { // now we have to create the actual bundle file @@ -383,7 +396,7 @@ public class TileSetBundler } // if this is an object tileset, trim it - if (set instanceof ObjectTileSet) { + if (!keepRawPngs && (set instanceof ObjectTileSet)) { // set the tileset up with an image provider; we // need to do this so that we can trim it! set.setImageProvider(improv); @@ -418,7 +431,7 @@ public class TileSetBundler File ifile = new File(imageBase, imagePath); try { BufferedImage image = ImageIO.read(ifile); - if (FastImageIO.canWrite(image)) { + if (!keepRawPngs && FastImageIO.canWrite(image)) { imagePath = adjustImagePath(imagePath); jar.putNextEntry(new JarEntry(imagePath)); set.setImagePath(imagePath); @@ -475,6 +488,7 @@ public class TileSetBundler int didx = imagePath.lastIndexOf("."); return ((didx == -1) ? imagePath : imagePath.substring(0, didx)) + ".raw"; + } /** Used to parse our configuration. */ @@ -498,4 +512,7 @@ public class TileSetBundler /** The digester we use to parse bundle descriptions. */ protected Digester _digester; + + /** Whether we should keep pngs as-is rather than re-encoding. */ + protected boolean _keepRawPngs; } diff --git a/src/java/com/threerings/media/tile/bundle/tools/TileSetBundlerTask.java b/src/java/com/threerings/media/tile/bundle/tools/TileSetBundlerTask.java index b7611f2a..b186c621 100644 --- a/src/java/com/threerings/media/tile/bundle/tools/TileSetBundlerTask.java +++ b/src/java/com/threerings/media/tile/bundle/tools/TileSetBundlerTask.java @@ -66,6 +66,15 @@ public class TileSetBundlerTask extends Task _filesets.add(set); } + /** + * Note whether we are supposed to use the raw png files directly in the bundle or try to + * re-encode them. + */ + public void setKeepRawPngs (boolean keep) + { + _keepRawPngs = keep; + } + /** * Performs the actual work of the task. */ @@ -137,7 +146,7 @@ public class TileSetBundlerTask extends Task protected TileSetBundler createBundler () throws IOException { - return new TileSetBundler(_config); + return new TileSetBundler(_config, _keepRawPngs); } /** @@ -161,4 +170,7 @@ public class TileSetBundlerTask extends Task /** A list of filesets that contain tileset bundle definitions. */ protected ArrayList _filesets = Lists.newArrayList(); + + /** Whether we should keep raw pngs rather than reencoding them in the bundle. */ + protected boolean _keepRawPngs; }