www.pudn.com > face_recognition_source.zip > ImageCanvas.java


import java.awt.*;
import java.awt.image.*;

/**
 * Canvas used to display any type of image. As long as its submitted
 * in byte[], int[] or double[] format with the appropiate
 * width and height. Also the image is converted into grayscale.
 *
 */
class ImageCanvas extends Canvas  {


    private Image memImage=null;      // image constructed from PPM data

    /**
     * Image displayed from the given array.
     *
     * @param bytes the byte array with the each element being an 8bit RGB
     * tuple
     * @param width The width of the iamge
     * @param height The height of the image
     */
    public void readImage(byte[] bytes, int width, int height) {

	int pix[] = new int[width * height];
	int index = 0;
        int ofs = 0;

        for (index = 0; index < pix.length-2; index++) {
          pix[index] = 255 << 24 /*alpha*/ |
                    (int)(bytes[ofs] & 0xFF) << 16 /*R*/ |
                    (int)(bytes[ofs] & 0xFF) << 8 /*G*/ |
                    (int)(bytes[ofs] & 0xFF) /*B*/;
          ofs += 1;
        }

        memImage = createImage(new MemoryImageSource(width, height, pix, 0, width));
	repaint();
    }

    /**
     * Image displayed from the given array.
     *
     * @param doubles the double array with the each element being an 64bit RGB
     * tuple. The alpha color is reset to FF and only the 24bits (from left to
     * right of each element are displayed).
     *
     * @param width The width of the iamge
     * @param height The height of the image
     */

    public void readImage(double[] doubles,  int width, int height) {


	// construct Image from binary PPM color data.


        int w = width;
	int h = height;

	int pix[] = new int[w * h];
	int index = 0;
        int avg = 0;
        for (index = 0; index < pix.length-2; index++) {
          //avg = (int) ((doubles[index] + doubles[index+1] + doubles[index+2]) / 3);
          avg = (int)doubles[index];
          pix[index] = 255 << 24 |/* avg << 16 | avg << 8 |*/ avg;


        }

        memImage = createImage(new MemoryImageSource(width, height, pix, 0, width));
	repaint();
    }

    /**
     * Image displayed from the given array.
     *
     * @param int the int array with the each element being an 32bit RGB
     * tuple. No conversion done.
     *
     * @param width The width of the iamge
     * @param height The height of the image
     */

    public void readImage(int[] ints, int width, int height) {

        memImage = createImage(new MemoryImageSource(width, height, ints, 0, width));
	repaint();
    }

    /**
     * Paint on our given object the given image.
     *
     */
    public void paint(Graphics g) {
	Dimension d = getSize();      // get size of drawing area
	g.setColor(getBackground());  // clear drawing area
	g.fillRect(0, 0, d.width, d.height);
	g.setColor(getForeground());

	if (memImage != null) {
	    g.drawImage(memImage, 0, 0, this);
	}
    }
}