//
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.image.*;
/*
HOW TO USE THIS CLASS FROM AN APPLET:
--- HERE'S WHAT YOU PUT INTO THE HTML FILE: ----
<applet code=myAmazingApplet.class width=500 height=500>
<param name=image value=http://myAmazingUrl.com/myAmazingImage.jpg>
</applet>
--- HERE'S WHAT YOU PUT INTO THE APPLET JAVA CODE: ----
String urlName = getParameter("image");
buffer = new ImageBuffer(urlName, this);
// HERE'S A REALLY TRIVIAL EXAMPLE OF SOMETHING TO DO WITH THE LOADED IMAGE.
// YOU'LL PROBABLY WANT TO DO SOMETHING MORE INTERESTING - LIKE TEXTURE MAPPING.
for (int y = 0 ; y < buffer.height ; y++)
for (int x = 0 ; x < buffer.width ; x++)
pix[x + width * y] = buffer.get(x, y);
*/
public class ImageBuffer
{
public int pixels[] = null, width = 0, height = 0;
// CONSTRUCT A NEW IMAGE BUFFER BY LOADING FROM A FILE OR URL
public ImageBuffer(String fileName, java.applet.Applet applet) {
// GRAB AN IMAGE FROM A URL ON THE WEB OR FROM A FILE ON DISK
Image image = null;
try {
if (fileName.length() >= 4 && fileName.substring(0,5).equals("http:"))
image = applet.getImage(new URL(fileName));
else
image = Toolkit.getDefaultToolkit().getImage(new URL(applet.getCodeBase(),fileName));
}
catch (Exception e) { System.err.println(e); }
// MOVE THE IMAGE INTO AN ARRAY OF PACKED R,G,B PIXELS
try {
MediaTracker mt = new MediaTracker(applet);
mt.addImage(image, 1);
mt.waitForAll();
width = image.getWidth (applet);
height = image.getHeight(applet);
pixels = new int[width * height];
(new PixelGrabber(image, 0, 0, width, height, pixels, 0, width)).grabPixels();
}
catch (InterruptedException e) { }
}
// GET THE PACKED R,G,B VALUE AT ONE PIXEL OF THE IMAGE BUFFER
public int get(int x, int y) { return pixels[x + width * y]; }
// GET A SINGLE COLOR COMPONENT - RED, GREEN OR BLUE - FROM A PIXEL
public int get(int x, int y, int c) { return get(x, y) >> 16-8*c & 255; }
}