initial revision
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1200 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user