From 9106842c04864fcca00fb938a167b16cb824fa9f Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Sat, 6 Apr 2002 02:15:37 +0000 Subject: [PATCH] initial revision git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1200 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../media/tile/MaskedUniformTileSet.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/java/com/threerings/media/tile/MaskedUniformTileSet.java diff --git a/src/java/com/threerings/media/tile/MaskedUniformTileSet.java b/src/java/com/threerings/media/tile/MaskedUniformTileSet.java new file mode 100644 index 000000000..7c084559a --- /dev/null +++ b/src/java/com/threerings/media/tile/MaskedUniformTileSet.java @@ -0,0 +1,76 @@ +// +// $Id: MaskedUniformTileSet.java,v 1.1 2002/04/06 02:15:37 ray Exp $ + +package com.threerings.media.tile; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; + + +/** + * A tileset created with a regular base tile and a fringe alpha mask. + */ +public class MaskedUniformTileSet extends UniformTileSet +{ + public MaskedUniformTileSet (Tile base, TileSet mask) + { + final Image bimg = base.getImage(); + final Image mimg = mask.getTilesetImage(); + + setTileCount(mask.getTileCount()); + setWidth(bimg.getWidth(null)); + setHeight(bimg.getHeight(null)); + + setImageProvider(new ImageProvider() { + + // perhaps this should be cleaned up + public Image loadImage (String ignored) + { + int bhei = bimg.getHeight(null); + int bwid = bimg.getWidth(null); + + int height = mimg.getHeight(null); + int width = mimg.getWidth(null); + + Raster basedata = ((BufferedImage) bimg).getData(); + Raster maskdata = ((BufferedImage) mimg).getData(); + + WritableRaster target = + basedata.createCompatibleWritableRaster(width, height); + + // now lets copy the entire alpha channel of mimg + int[] adata = maskdata.getSamples(0, 0, width, height, 3, + (int[]) null); + target.setSamples(0, 0, width, height, 3, adata); + + // now copy the RGB from the base image + for (int ii=0; ii < 3; ii++) { + + // copy each row from the base image one at a time + for (int jj=0; jj < bhei; jj++) { + + int[] cdata = basedata.getSamples(0, jj, bwid, 1, ii, + (int[]) null); + + // paste the row everywhere we need one in the + // newly created fringe image + for (int y=0; y < (height / bhei); y++) { + for (int x=0; x < (width / bwid); x++) { + target.setSamples(x * bwid, y * bhei + jj, + bwid, 1, ii, cdata); + } + } + } + } + + ColorModel cm = ((BufferedImage) mimg).getColorModel(); + + // work it, baby! + return new BufferedImage(cm, target, true, null); + } + }); + } +}