More tweaking of the image loading and generating process.

This commit is contained in:
hns 2003-02-03 16:59:24 +00:00
parent 2c1fdf3d0f
commit e2c6d1903b

View file

@ -9,8 +9,8 @@ import java.net.URL;
import java.net.MalformedURLException; import java.net.MalformedURLException;
/** /**
* This creates an invisible frame in order to be able to create images * Factory class for generating Image objects from various sources.
* from Java. (Java needs a window context in order to user the Image class). *
*/ */
public class ImageGenerator { public class ImageGenerator {
@ -30,14 +30,17 @@ public class ImageGenerator {
ImageWrapper rimg = null; ImageWrapper rimg = null;
Image img1 = Toolkit.getDefaultToolkit ().createImage (src); Image img1 = Toolkit.getDefaultToolkit ().createImage (src);
ImageLoader loader = new ImageLoader (img1); ImageLoader loader = new ImageLoader (img1);
try {
loader.getDimensions (); loader.getDimensions ();
int w = loader.getWidth (); int w = loader.getWidth ();
int h = loader.getHeight (); int h = loader.getHeight ();
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB); Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics (); Graphics g = img.getGraphics ();
if (!g.drawImage (img1, 0, 0, loader)) g.drawImage (img1, 0, 0, null);
loader.getBits ();
rimg = new SunImageWrapper (img, g, w, h, this); rimg = new SunImageWrapper (img, g, w, h, this);
} finally {
loader.done();
}
return rimg; return rimg;
} }
@ -45,10 +48,14 @@ public class ImageGenerator {
ImageWrapper rimg = null; ImageWrapper rimg = null;
Image img = Toolkit.getDefaultToolkit ().createImage (src); Image img = Toolkit.getDefaultToolkit ().createImage (src);
ImageLoader loader = new ImageLoader (img); ImageLoader loader = new ImageLoader (img);
try {
loader.getDimensions (); loader.getDimensions ();
int w = loader.getWidth (); int w = loader.getWidth ();
int h = loader.getHeight (); int h = loader.getHeight ();
rimg = new SunImageWrapper (img, null, w, h, this); rimg = new SunImageWrapper (img, null, w, h, this);
} finally {
loader.done();
}
return rimg; return rimg;
} }
@ -58,14 +65,17 @@ public class ImageGenerator {
URL url = new URL (urlstring); URL url = new URL (urlstring);
Image img1 = Toolkit.getDefaultToolkit ().createImage (url); Image img1 = Toolkit.getDefaultToolkit ().createImage (url);
ImageLoader loader = new ImageLoader (img1); ImageLoader loader = new ImageLoader (img1);
try {
loader.getDimensions (); loader.getDimensions ();
int w = loader.getWidth (); int w = loader.getWidth ();
int h = loader.getHeight (); int h = loader.getHeight ();
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB); Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics (); Graphics g = img.getGraphics ();
if(!g.drawImage (img1, 0, 0, loader)) g.drawImage (img1, 0, 0, null);
loader.getBits ();
rimg = new SunImageWrapper (img, g, w, h, this); rimg = new SunImageWrapper (img, g, w, h, this);
} finally {
loader.done();
}
return rimg; return rimg;
} }
@ -74,14 +84,17 @@ public class ImageGenerator {
FilteredImageSource fis = new FilteredImageSource (iw.getSource(), filter); FilteredImageSource fis = new FilteredImageSource (iw.getSource(), filter);
Image img1 = Toolkit.getDefaultToolkit().createImage (fis); Image img1 = Toolkit.getDefaultToolkit().createImage (fis);
ImageLoader loader = new ImageLoader (img1); ImageLoader loader = new ImageLoader (img1);
try {
loader.getDimensions (); loader.getDimensions ();
int w = loader.getWidth (); int w = loader.getWidth ();
int h = loader.getHeight (); int h = loader.getHeight ();
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB); Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics (); Graphics g = img.getGraphics ();
if (!g.drawImage (img1, 0, 0, loader)) g.drawImage (img1, 0, 0, null);
loader.getBits ();
rimg = new SunImageWrapper (img, g, w, h, this); rimg = new SunImageWrapper (img, g, w, h, this);
} finally {
loader.done();
}
return rimg; return rimg;
} }
@ -91,6 +104,7 @@ public class ImageGenerator {
img = Toolkit.getDefaultToolkit ().createImage (filename); img = Toolkit.getDefaultToolkit ().createImage (filename);
ImageLoader loader = new ImageLoader (img); ImageLoader loader = new ImageLoader (img);
loader.getDimensions (); loader.getDimensions ();
loader.done();
return img; return img;
} }
@ -99,6 +113,7 @@ public class ImageGenerator {
img = Toolkit.getDefaultToolkit ().createImage (producer); img = Toolkit.getDefaultToolkit ().createImage (producer);
ImageLoader loader = new ImageLoader (img); ImageLoader loader = new ImageLoader (img);
loader.getDimensions (); loader.getDimensions ();
loader.done();
return img; return img;
} }
@ -118,7 +133,8 @@ public class ImageGenerator {
synchronized void getDimensions () { synchronized void getDimensions () {
w = img.getWidth(this); w = img.getWidth(this);
h = img.getHeight (this); h = img.getHeight (this);
if (w == -1 || h == -1) try { if (w == -1 || h == -1) {
try {
wait (45000); wait (45000);
} catch (InterruptedException x) { } catch (InterruptedException x) {
waiting = false; waiting = false;
@ -126,21 +142,16 @@ public class ImageGenerator {
} finally { } finally {
waiting = false; waiting = false;
} }
}
// if width and height haven't been set, throw tantrum // if width and height haven't been set, throw tantrum
if (w == -1 || h == -1) { if (w == -1 || h == -1) {
throw new RuntimeException ("Error loading image"); throw new RuntimeException ("Error loading image");
} }
} }
synchronized void getBits () { synchronized void done () {
if (!firstFrameLoaded) try {
wait (45000);
} catch (InterruptedException x) {
waiting = false; waiting = false;
return; notifyAll ();
} finally {
waiting = false;
}
} }
int getWidth () { int getWidth () {
@ -157,12 +168,18 @@ public class ImageGenerator {
int y, int y,
int width, int width,
int height) { int height) {
// check if there was an error
if (!waiting || (infoflags & ERROR) > 0 || (infoflags & ABORT) > 0) {
// we either timed out or there was an error.
notifyAll ();
return false;
}
if ((infoflags & WIDTH) > 0 || (infoflags & HEIGHT) > 0) { if ((infoflags & WIDTH) > 0 || (infoflags & HEIGHT) > 0) {
if ((infoflags & WIDTH) > 0) if ((infoflags & WIDTH) > 0)
w = width; w = width;
if ((infoflags & HEIGHT) > 0) if ((infoflags & HEIGHT) > 0)
h = height; h = height;
if (w > -1 && h > -1) { if (w > -1 && h > -1 && firstFrameLoaded) {
notifyAll (); notifyAll ();
return false; return false;
} }
@ -172,12 +189,6 @@ public class ImageGenerator {
notifyAll (); notifyAll ();
return false; return false;
} }
// check if there was an error
if (!waiting || (infoflags & ERROR) > 0 || (infoflags & ABORT) > 0) {
// we either timed out or there was an error.
notifyAll ();
return false;
}
return true; return true;
} }