ImageGenerator does no longer extend java.awt.Window.
Should work in headless mode now.
This commit is contained in:
parent
c07fc06de4
commit
63f7a2e4df
2 changed files with 121 additions and 98 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue