More tweaking of the image loading and generating process.
This commit is contained in:
parent
2c1fdf3d0f
commit
e2c6d1903b
1 changed files with 65 additions and 54 deletions
|
@ -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);
|
||||||
loader.getDimensions ();
|
try {
|
||||||
int w = loader.getWidth ();
|
loader.getDimensions ();
|
||||||
int h = loader.getHeight ();
|
int w = loader.getWidth ();
|
||||||
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
int h = loader.getHeight ();
|
||||||
Graphics g = img.getGraphics ();
|
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
if (!g.drawImage (img1, 0, 0, loader))
|
Graphics g = img.getGraphics ();
|
||||||
loader.getBits ();
|
g.drawImage (img1, 0, 0, null);
|
||||||
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);
|
||||||
loader.getDimensions ();
|
try {
|
||||||
int w = loader.getWidth ();
|
loader.getDimensions ();
|
||||||
int h = loader.getHeight ();
|
int w = loader.getWidth ();
|
||||||
rimg = new SunImageWrapper (img, null, w, h, this);
|
int h = loader.getHeight ();
|
||||||
|
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);
|
||||||
loader.getDimensions ();
|
try {
|
||||||
int w = loader.getWidth ();
|
loader.getDimensions ();
|
||||||
int h = loader.getHeight ();
|
int w = loader.getWidth ();
|
||||||
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
int h = loader.getHeight ();
|
||||||
Graphics g = img.getGraphics ();
|
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
if(!g.drawImage (img1, 0, 0, loader))
|
Graphics g = img.getGraphics ();
|
||||||
loader.getBits ();
|
g.drawImage (img1, 0, 0, null);
|
||||||
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);
|
||||||
loader.getDimensions ();
|
try {
|
||||||
int w = loader.getWidth ();
|
loader.getDimensions ();
|
||||||
int h = loader.getHeight ();
|
int w = loader.getWidth ();
|
||||||
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
int h = loader.getHeight ();
|
||||||
Graphics g = img.getGraphics ();
|
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
if (!g.drawImage (img1, 0, 0, loader))
|
Graphics g = img.getGraphics ();
|
||||||
loader.getBits ();
|
g.drawImage (img1, 0, 0, null);
|
||||||
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,13 +133,15 @@ 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) {
|
||||||
wait (45000);
|
try {
|
||||||
} catch (InterruptedException x) {
|
wait (45000);
|
||||||
waiting = false;
|
} catch (InterruptedException x) {
|
||||||
return;
|
waiting = false;
|
||||||
} finally {
|
return;
|
||||||
waiting = false;
|
} finally {
|
||||||
|
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) {
|
||||||
|
@ -132,15 +149,9 @@ public class ImageGenerator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized void getBits () {
|
synchronized void done () {
|
||||||
if (!firstFrameLoaded) try {
|
waiting = false;
|
||||||
wait (45000);
|
notifyAll ();
|
||||||
} catch (InterruptedException x) {
|
|
||||||
waiting = false;
|
|
||||||
return;
|
|
||||||
} 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue