Add functionality to the resource:// handler to allow a colorization to be passed as options on the URL.
git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@840 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
@@ -39,6 +39,10 @@ import com.samskivert.io.ByteArrayOutInputStream;
|
|||||||
import com.samskivert.net.AttachableURLFactory;
|
import com.samskivert.net.AttachableURLFactory;
|
||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
|
|
||||||
|
import com.threerings.media.image.ColorPository;
|
||||||
|
import com.threerings.media.image.Colorization;
|
||||||
|
import com.threerings.media.image.ImageUtil;
|
||||||
|
|
||||||
import com.threerings.geom.GeomUtil;
|
import com.threerings.geom.GeomUtil;
|
||||||
|
|
||||||
import static com.threerings.resource.Log.log;
|
import static com.threerings.resource.Log.log;
|
||||||
@@ -153,6 +157,8 @@ public class Handler extends URLStreamHandler
|
|||||||
// parse the query string
|
// parse the query string
|
||||||
String[] bits = StringUtil.split(query, "&");
|
String[] bits = StringUtil.split(query, "&");
|
||||||
int width = -1, height = -1, tidx = -1;
|
int width = -1, height = -1, tidx = -1;
|
||||||
|
String zationClass = null;
|
||||||
|
int zationColorId = -1;
|
||||||
try {
|
try {
|
||||||
for (String bit : bits) {
|
for (String bit : bits) {
|
||||||
if (bit.startsWith("width=")) {
|
if (bit.startsWith("width=")) {
|
||||||
@@ -161,6 +167,10 @@ public class Handler extends URLStreamHandler
|
|||||||
height = Integer.parseInt(bit.substring(7));
|
height = Integer.parseInt(bit.substring(7));
|
||||||
} else if (bit.startsWith("tile=")) {
|
} else if (bit.startsWith("tile=")) {
|
||||||
tidx = Integer.parseInt(bit.substring(5));
|
tidx = Integer.parseInt(bit.substring(5));
|
||||||
|
} else if (bit.startsWith("zationClass=")) {
|
||||||
|
zationClass = bit.substring(12);
|
||||||
|
} else if (bit.startsWith("zationColorId=")) {
|
||||||
|
zationColorId = Integer.parseInt(bit.substring(14));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException nfe) {
|
} catch (NumberFormatException nfe) {
|
||||||
@@ -179,6 +189,16 @@ public class Handler extends URLStreamHandler
|
|||||||
src.getWidth(), src.getHeight(), width, height, tidx);
|
src.getWidth(), src.getHeight(), width, height, tidx);
|
||||||
BufferedImage tile = src.getSubimage(
|
BufferedImage tile = src.getSubimage(
|
||||||
trect.x, trect.y, trect.width, trect.height);
|
trect.x, trect.y, trect.width, trect.height);
|
||||||
|
if (zationClass != null && zationColorId >= 0) {
|
||||||
|
try {
|
||||||
|
ColorPository pository = ColorPository.loadColorPository(_rmgr);
|
||||||
|
Colorization zation = pository.getColorization(zationClass, zationColorId);
|
||||||
|
tile = ImageUtil.recolorImage(tile, zation.rootColor, zation.range, zation.offsets);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warning("Trouble recoloring image in resource handler.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ByteArrayOutInputStream data = new ByteArrayOutInputStream();
|
ByteArrayOutInputStream data = new ByteArrayOutInputStream();
|
||||||
ImageIO.write(tile, "PNG", data);
|
ImageIO.write(tile, "PNG", data);
|
||||||
return data.getInputStream();
|
return data.getInputStream();
|
||||||
|
|||||||
Reference in New Issue
Block a user