From 783e3d9799bacade00966121fa3baa23c10bc152 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 30 Nov 2001 02:33:34 +0000 Subject: [PATCH] Obtain the information for our display device and create images optimized for display on it. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@717 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../threerings/media/image/ImageManager.java | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/src/java/com/threerings/media/image/ImageManager.java b/src/java/com/threerings/media/image/ImageManager.java index 12aa01dca..ea098f27f 100644 --- a/src/java/com/threerings/media/image/ImageManager.java +++ b/src/java/com/threerings/media/image/ImageManager.java @@ -1,13 +1,27 @@ // -// $Id: ImageManager.java,v 1.7 2001/11/18 04:09:21 mdb Exp $ +// $Id: ImageManager.java,v 1.8 2001/11/30 02:33:34 mdb Exp $ package com.threerings.media; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Transparency; import java.awt.image.BufferedImage; + +import java.io.InputStream; import java.io.IOException; + import java.util.HashMap; +import java.util.Iterator; +import java.util.NoSuchElementException; import javax.imageio.ImageIO; +import javax.imageio.ImageReader; + +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; import com.threerings.resource.ResourceManager; import com.threerings.media.Log; @@ -24,6 +38,12 @@ public class ImageManager public ImageManager (ResourceManager rmgr) { _rmgr = rmgr; + + // obtain information on our graphics environment + GraphicsEnvironment genv = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice gdev = genv.getDefaultScreenDevice(); + _gconf = gdev.getDefaultConfiguration(); } /** @@ -40,15 +60,47 @@ public class ImageManager } // Log.info("Loading image into cache [path=" + path + "]."); - img = ImageIO.read(_rmgr.getResource(path)); + img = createImage(_rmgr.getResource(path)); _imgs.put(path, img); return img; } + /** + * Creates an image that is optimized for rendering in the client's + * environment and decodes the image data from the specified source + * image into that target image. The resulting image is not cached. + */ + public BufferedImage createImage (InputStream source) + throws IOException + { + // this seems to choke when decoding the compressed image data + // which may mean it's a JDK bug or something, but I'd like to see + // it resolved so that the image manager will work on applets + // + // ImageInputStream iis = new MemoryCacheImageInputStream(source); + // BufferedImage src = ImageIO.read(iis); + + BufferedImage src = ImageIO.read(source); + int swidth = src.getWidth(); + int sheight = src.getHeight(); + + // now convert the image to a format optimized for display + BufferedImage dest = _gconf.createCompatibleImage( + swidth, sheight, Transparency.BITMASK); + Graphics2D g2 = dest.createGraphics(); + g2.drawImage(src, 0, 0, null); + g2.dispose(); + + return dest; + } + /** A reference to the resource manager via which we load image data * by default. */ protected ResourceManager _rmgr; /** A cache of loaded images. */ protected HashMap _imgs = new HashMap(); + + /** The graphics configuration of our default display device. */ + protected GraphicsConfiguration _gconf; }