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.*;
|
||||||
import java.awt.image.*;
|
import java.awt.image.*;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This creates an invisible frame in order to be able to create images
|
* 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).
|
* from Java. (Java needs a window context in order to user the Image class).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class ImageGenerator extends Window {
|
public class ImageGenerator {
|
||||||
|
|
||||||
public ImageGenerator () {
|
public ImageGenerator () {
|
||||||
super (new Frame() {
|
// nothing to do
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageWrapper createPaintableImage (int w, int h) {
|
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 ();
|
Graphics g = img.getGraphics ();
|
||||||
ImageWrapper rimg = null;
|
ImageWrapper rimg = null;
|
||||||
try {
|
rimg = new SunImageWrapper (img, g, w, h, this);
|
||||||
rimg = new SunImageWrapper (img, g, w, h, this);
|
|
||||||
} catch (Exception x) {
|
|
||||||
System.err.println ("Can't create image: "+x);
|
|
||||||
}
|
|
||||||
return rimg;
|
return rimg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageWrapper createPaintableImage (byte src[]) {
|
public ImageWrapper createPaintableImage (byte src[]) {
|
||||||
ImageWrapper rimg = null;
|
ImageWrapper rimg = null;
|
||||||
MediaTracker tracker = new MediaTracker (this);
|
Image img1 = Toolkit.getDefaultToolkit ().createImage (src);
|
||||||
try {
|
ImageLoader loader = new ImageLoader (img1);
|
||||||
Image img1 = Toolkit.getDefaultToolkit ().createImage (src);
|
loader.load ();
|
||||||
tracker.addImage (img1, 0);
|
int w = loader.getWidth ();
|
||||||
tracker.waitForAll ();
|
int h = loader.getHeight ();
|
||||||
int w = img1.getWidth (null);
|
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
int h = img1.getHeight (null);
|
Graphics g = img.getGraphics ();
|
||||||
Image img = createImage (w, h);
|
g.drawImage (img1, 0, 0, null);
|
||||||
Graphics g = img.getGraphics ();
|
rimg = new SunImageWrapper (img, g, w, h, this);
|
||||||
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;
|
return rimg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageWrapper createImage (byte src[]) {
|
public ImageWrapper createImage (byte src[]) {
|
||||||
ImageWrapper rimg = null;
|
ImageWrapper rimg = null;
|
||||||
MediaTracker tracker = new MediaTracker (this);
|
Image img = Toolkit.getDefaultToolkit ().createImage (src);
|
||||||
try {
|
ImageLoader loader = new ImageLoader (img);
|
||||||
Image img = Toolkit.getDefaultToolkit ().createImage (src);
|
loader.load ();
|
||||||
tracker.addImage (img, 0);
|
int w = loader.getWidth ();
|
||||||
tracker.waitForAll ();
|
int h = loader.getHeight ();
|
||||||
int w = img.getWidth (null);
|
rimg = new SunImageWrapper (img, null, w, h, this);
|
||||||
int h = img.getHeight (null);
|
|
||||||
rimg = new SunImageWrapper (img, null, w, h, this);
|
|
||||||
} catch (Exception x) {
|
|
||||||
System.err.println ("Can't create image: "+x);
|
|
||||||
}
|
|
||||||
return rimg;
|
return rimg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ImageWrapper createPaintableImage (String urlstring) {
|
public ImageWrapper createPaintableImage (String urlstring) throws MalformedURLException {
|
||||||
ImageWrapper rimg = null;
|
ImageWrapper rimg = null;
|
||||||
MediaTracker tracker = new MediaTracker (this);
|
URL url = new URL (urlstring);
|
||||||
try {
|
Image img1 = Toolkit.getDefaultToolkit ().createImage (url);
|
||||||
URL url = new URL (urlstring);
|
ImageLoader loader = new ImageLoader (img1);
|
||||||
Image img1 = Toolkit.getDefaultToolkit ().createImage (url);
|
loader.load ();
|
||||||
tracker.addImage (img1, 0);
|
int w = loader.getWidth ();
|
||||||
tracker.waitForAll ();
|
int h = loader.getHeight ();
|
||||||
int w = img1.getWidth (null);
|
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
int h = img1.getHeight (null);
|
Graphics g = img.getGraphics ();
|
||||||
Image img = createImage (w, h);
|
g.drawImage (img1, 0, 0, null);
|
||||||
Graphics g = img.getGraphics ();
|
rimg = new SunImageWrapper (img, g, w, h, this);
|
||||||
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;
|
return rimg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageWrapper createPaintableImage (ImageWrapper iw, ImageFilter filter) {
|
public ImageWrapper createPaintableImage (ImageWrapper iw, ImageFilter filter) {
|
||||||
ImageWrapper rimg = null;
|
ImageWrapper rimg = null;
|
||||||
MediaTracker tracker = new MediaTracker (this);
|
FilteredImageSource fis = new FilteredImageSource (iw.getSource(), filter);
|
||||||
try {
|
Image img1 = Toolkit.getDefaultToolkit().createImage (fis);
|
||||||
FilteredImageSource fis = new FilteredImageSource (iw.getSource(), filter);
|
ImageLoader loader = new ImageLoader (img1);
|
||||||
Image img1 = createImage (fis);
|
loader.load ();
|
||||||
tracker.addImage (img1, 0);
|
int w = loader.getWidth ();
|
||||||
tracker.waitForAll ();
|
int h = loader.getHeight ();
|
||||||
int w = img1.getWidth (null);
|
Image img = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
int h = img1.getHeight (null);
|
Graphics g = img.getGraphics ();
|
||||||
Image img = createImage (w, h);
|
g.drawImage (img1, 0, 0, null);
|
||||||
Graphics g = img.getGraphics ();
|
rimg = new SunImageWrapper (img, g, w, h, this);
|
||||||
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;
|
return rimg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Image createImage (String filename) {
|
public Image createImage (String filename) {
|
||||||
Image img = null;
|
Image img = null;
|
||||||
MediaTracker tracker = new MediaTracker (this);
|
img = Toolkit.getDefaultToolkit ().createImage (filename);
|
||||||
try {
|
ImageLoader loader = new ImageLoader (img);
|
||||||
img = Toolkit.getDefaultToolkit ().createImage (filename);
|
loader.load ();
|
||||||
tracker.addImage (img, 0);
|
|
||||||
tracker.waitForAll ();
|
|
||||||
} catch (Exception x) {
|
|
||||||
System.err.println ("Can't create image: "+x);
|
|
||||||
x.printStackTrace ();
|
|
||||||
}
|
|
||||||
return img;
|
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 class SunImageWrapper extends ImageWrapper {
|
||||||
|
|
||||||
public SunImageWrapper (Image img, Graphics g, int width, int height,
|
public SunImageWrapper (Image img, Graphics g, int width, int height,
|
||||||
ImageGenerator imggen) throws ClassNotFoundException {
|
ImageGenerator imggen) {
|
||||||
super (img, g, width, height, 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));
|
img = imggen.createImage (new MemoryImageSource(w, h, pix, 0, w));
|
||||||
// ColorReducer redux = new ColorReducer (colors, true);
|
|
||||||
// img = redux.getColorReducedImage (img);
|
|
||||||
} catch (Exception x) {
|
} catch (Exception x) {
|
||||||
// throw new RuntimeException (x.getMessage ());
|
// throw new RuntimeException (x.getMessage ());
|
||||||
}
|
}
|
||||||
|
@ -77,9 +74,6 @@ public class SunImageWrapper extends ImageWrapper {
|
||||||
// Acme gif encoder
|
// Acme gif encoder
|
||||||
GifEncoder enc = new GifEncoder (img, fout);
|
GifEncoder enc = new GifEncoder (img, fout);
|
||||||
enc.encode ();
|
enc.encode ();
|
||||||
// new alternative gif encoder
|
|
||||||
// GIFEncoder enc = new GIFEncoder (img);
|
|
||||||
// enc.Write (fout);
|
|
||||||
fout.close ();
|
fout.close ();
|
||||||
} else {
|
} else {
|
||||||
Jimi.putImage (img, filename);
|
Jimi.putImage (img, filename);
|
||||||
|
|
Loading…
Add table
Reference in a new issue