ImageGenerator does no longer extend java.awt.Window.

Should work in headless mode now.
This commit is contained in:
hns 2002-11-27 15:52:33 +00:00
parent c07fc06de4
commit 63f7a2e4df
2 changed files with 121 additions and 98 deletions

View file

@ -6,134 +6,163 @@ package helma.image;
import java.awt.*;
import java.awt.image.*;
import java.net.URL;
import java.net.MalformedURLException;
/**
* This creates an invisible frame in order to be able to create images
* from Java. (Java needs a window context in order to user the Image class).
*/
public class ImageGenerator extends Window {
public class ImageGenerator {
public ImageGenerator () {
super (new Frame() {
public void setVisible (boolean b) {
// This frame can never be shown
}
public synchronized void dispose() {
try {
getToolkit().getSystemEventQueue();
super.dispose();
} catch (Exception e) {
// untrusted code not allowed to dispose
}
}
}
);
setBounds (0, 0, 1, 1);
setVisible (true);
// nothing to do
}
public ImageWrapper createPaintableImage (int w, int h) {
Image img = createImage (w, h);
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics ();
ImageWrapper rimg = null;
try {
rimg = new SunImageWrapper (img, g, w, h, this);
} catch (Exception x) {
System.err.println ("Can't create image: "+x);
}
return rimg;
}
public ImageWrapper createPaintableImage (byte src[]) {
ImageWrapper rimg = null;
MediaTracker tracker = new MediaTracker (this);
try {
Image img1 = Toolkit.getDefaultToolkit ().createImage (src);
tracker.addImage (img1, 0);
tracker.waitForAll ();
int w = img1.getWidth (null);
int h = img1.getHeight (null);
Image img = createImage (w, h);
ImageLoader loader = new ImageLoader (img1);
loader.load ();
int w = loader.getWidth ();
int h = loader.getHeight ();
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics ();
g.drawImage (img1, 0, 0, null);
rimg = new SunImageWrapper (img, g, w, h, this);
} catch (Exception x) {
System.err.println ("Can't create image: "+x);
}
return rimg;
}
public ImageWrapper createImage (byte src[]) {
ImageWrapper rimg = null;
MediaTracker tracker = new MediaTracker (this);
try {
Image img = Toolkit.getDefaultToolkit ().createImage (src);
tracker.addImage (img, 0);
tracker.waitForAll ();
int w = img.getWidth (null);
int h = img.getHeight (null);
ImageLoader loader = new ImageLoader (img);
loader.load ();
int w = loader.getWidth ();
int h = loader.getHeight ();
rimg = new SunImageWrapper (img, null, w, h, this);
} catch (Exception x) {
System.err.println ("Can't create image: "+x);
}
return rimg;
}
public ImageWrapper createPaintableImage (String urlstring) {
public ImageWrapper createPaintableImage (String urlstring) throws MalformedURLException {
ImageWrapper rimg = null;
MediaTracker tracker = new MediaTracker (this);
try {
URL url = new URL (urlstring);
Image img1 = Toolkit.getDefaultToolkit ().createImage (url);
tracker.addImage (img1, 0);
tracker.waitForAll ();
int w = img1.getWidth (null);
int h = img1.getHeight (null);
Image img = createImage (w, h);
ImageLoader loader = new ImageLoader (img1);
loader.load ();
int w = loader.getWidth ();
int h = loader.getHeight ();
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics ();
g.drawImage (img1, 0, 0, null);
rimg = new SunImageWrapper (img, g, w, h, this);
} catch (Exception x) {
System.err.println ("Can't create image: "+x);
x.printStackTrace ();
}
return rimg;
}
public ImageWrapper createPaintableImage (ImageWrapper iw, ImageFilter filter) {
ImageWrapper rimg = null;
MediaTracker tracker = new MediaTracker (this);
try {
FilteredImageSource fis = new FilteredImageSource (iw.getSource(), filter);
Image img1 = createImage (fis);
tracker.addImage (img1, 0);
tracker.waitForAll ();
int w = img1.getWidth (null);
int h = img1.getHeight (null);
Image img = createImage (w, h);
Image img1 = Toolkit.getDefaultToolkit().createImage (fis);
ImageLoader loader = new ImageLoader (img1);
loader.load ();
int w = loader.getWidth ();
int h = loader.getHeight ();
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics ();
g.drawImage (img1, 0, 0, null);
rimg = new SunImageWrapper (img, g, w, h, this);
} catch (Exception x) {
System.err.println ("Can't create image: "+x);
}
return rimg;
}
public Image createImage (String filename) {
Image img = null;
MediaTracker tracker = new MediaTracker (this);
try {
img = Toolkit.getDefaultToolkit ().createImage (filename);
tracker.addImage (img, 0);
tracker.waitForAll ();
} catch (Exception x) {
System.err.println ("Can't create image: "+x);
x.printStackTrace ();
}
ImageLoader loader = new ImageLoader (img);
loader.load ();
return img;
}
public Image createImage (ImageProducer producer) {
Image img = null;
img = Toolkit.getDefaultToolkit ().createImage (producer);
ImageLoader loader = new ImageLoader (img);
loader.load ();
return img;
}
class ImageLoader implements ImageObserver {
Image img;
int w, h;
ImageLoader (Image img) {
this.img = img;
}
int getWidth () {
return w;
}
int getHeight () {
return h;
}
synchronized void load () {
w = img.getWidth(this);
h = img.getHeight (this);
if (w == -1 || h == -1) try {
wait (30000);
} catch (InterruptedException x) {
return;
}
// if width and height haven't been set, throw tantrum
if (w == -1 || h == -1) {
throw new RuntimeException ("Error loading image");
}
}
public synchronized boolean imageUpdate(Image img,
int infoflags,
int x,
int y,
int width,
int height) {
if (w == -1 && (infoflags & WIDTH) > 0)
w = width;
if (h == -1 && (infoflags & HEIGHT) > 0)
h = height;
if (h > -1 && w > -1 && (infoflags & ALLBITS) > 0) {
// we know all we want to know. notify waiting thread that
// the image is loaded and ready to be used.
notifyAll ();
return false;
}
// check if there was an error
if ((infoflags & ERROR) > 0) {
notifyAll ();
return false;
}
// TODO: If image production was aborted, but no error was reported,
// we might want to start production again. For now, we just give up.
if ((infoflags & ABORT) > 0) {
notifyAll ();
return false;
}
return true;
}
}
}

View file

@ -19,9 +19,8 @@ import java.io.FileOutputStream;
public class SunImageWrapper extends ImageWrapper {
public SunImageWrapper (Image img, Graphics g, int width, int height,
ImageGenerator imggen) throws ClassNotFoundException {
ImageGenerator imggen) {
super (img, g, width, height, imggen);
Class.forName ("com.sun.jimi.core.Jimi");
}
@ -39,8 +38,6 @@ public class SunImageWrapper extends ImageWrapper {
}
}
img = imggen.createImage (new MemoryImageSource(w, h, pix, 0, w));
// ColorReducer redux = new ColorReducer (colors, true);
// img = redux.getColorReducedImage (img);
} catch (Exception x) {
// throw new RuntimeException (x.getMessage ());
}
@ -77,9 +74,6 @@ public class SunImageWrapper extends ImageWrapper {
// Acme gif encoder
GifEncoder enc = new GifEncoder (img, fout);
enc.encode ();
// new alternative gif encoder
// GIFEncoder enc = new GIFEncoder (img);
// enc.Write (fout);
fout.close ();
} else {
Jimi.putImage (img, filename);