Lecture 13

home Contents Index Prev Next

Lecture Topic:

Image, PixelPlane, MakeImage and ImageFrame


An example about image process



Java class in DiffCAD(BY Professor Douglas Lyon)



        PixelPlane.java

        ImageFrame.java

        Util.java



Pixelplane





        getRed

        getBule

        getGreen

        getAlpha






a pixel int = alpha(8 bit) red(8 bit) blue(8 bit) green(8 bit)

Example

public class PixelPlane{ //class PixelPlane

        int pels[ ];  // member variable

        int width;

        int height;

        ColorModel cm;



                PixelPlane(int w, int h) {

                        .

                        .

                        .

                }

void grabPixels(Image image) {

        pels = new int[width * height];



        try {

                .

                .

                .

        }

        catch (Exception e){

                .

                .

                .

        }

}



public int getRed(int x, int y) {

        return cm.getRed (pels[y*width + x]);

}

public int getBlue(int x, int y) { … }



public int getGreen(int x, int y) { … }



public int getAlpha(int x, int y) { … }



// then

public int MakePixel (int r, int g, int b, int a){ … }



public void  setPixel (int x, int y, int r, int g, int b, int a){ … }



//set a packed pel

public void  setPixel (int x, int y, int pel) { … }



//get a packed pel

public int  getPixel (int x, int y ) { … }



public void printSize() { … }



}



ImageFrame

ImageFrame handles events



Example

public class ImageFrame extends Frame {

        private Image image; //member variable

        PixelPlane oldPixels;

        PixelPlane newPixels;

        private String fileName;



        Menu m = new Menu("Image Menu");



        MenuItem open_gif_mi = addItem("Open gif");

        MenuItem  …              = addItem(" … ");

                                .

                                .

                                .



public boolean handleEvent(Event e) ( //method

        if(e.target == open_gif_mi) {

                ImageFrame = new ImageFrame();

                return true;

}

        if(e.target == … ) { … }

                .

                .

                .

        if(e.id == e.WINDOW_DESTORY) {

                this.hide();

                return true;

        }

        return super.handleEvent(e);

}



public MenuItem addItem(String itemName) { … }



public void init_menu() { … }



        public ImageFrame() {

                init_menu();

                getImage();

                init();

        }



        public ImageFrame(Image image) {

                init_menu();

                getImage(image);

                init();

        }



        public ImageFrame(Image image, Strings_) {

                fileName = s_;

                init_menu();

                getImage(image);

                init();

        }



public void init() { … }



public void makeImage() {

        ImageFrame f = new ImageFrame(

                getToolkit().createImage(

                        new MemoryImageSource(

                        newPixels.width,

                        newPixels.height,

                        ColorModel.getRGBdefault(),

                        newPixels.pels, 0,

                        newPixels.width)));

}



public void shadow() {

        newPixels = new PixelPalne(oldPixels.width, oldPixels.height);

        int r, g, b, a;

        for (int y = 0; y < oldPixelPlane(oldPixels.height - 2; y++)

                for (int x = 0; x < oldPixelPlane(oldPixels.width - 2; x++) {

                        r = oldPixels.getRed(x, y);

                        g = oldPixels.getGreen(x, y);

                        b = oldPixels.getBlue(x, y);

                        a = oldPixels.getAlpha(x, y);

                        r = r + (127 - oldPixels.getRed(x+2, Y+2));

                        g = r + (127 - oldPixels.getGreen(x+2, Y+2));

                        b = r + (127 - oldPixels.getBlue(x+2, Y+2));

                        newPixels.setPixel(x, y, r, g, b, a);

                }

        makeImage();

}



public void negate() {

        newPixels = new PixelPalne(oldPixels.width, oldPixels.height);

        int r, g, b, a;

        for (int y = 0; y < oldPixelPlane(oldPixels.height; y++)

                for (int x = 0; x < oldPixelPlane(oldPixels.width; x++) {

                        r = oldPixels.getRed(x, y);

                        g = oldPixels.getGreen(x, y);

                        b = oldPixels.getBlue(x, y);

                        a = oldPixels.getAlpha(x, y);

                        newPixels.setPixel(x, y, 255-r, 255-g, 255-b, a);

                }

        makeImage();

}



public void makeGray() { … }



public void diagGray() { … }



public void cornergray() { … }



public void threshold() { … }



public void edge() {  //New edge detection algorithm

                        //1.get average A

                        //2.find e1, e2

                        //3.single pixel em

//1.assume edge is a BLOB of connected pixel, segment the Image by intensity

//2.assume grayscale

        

        newPixels = new PixelPlane(oldPixels.width, oldPixels.height);

        int r, a;

        int average; // average intensity

        for (int y = 0; y < oldPixels.height: y++) // find single pixel

        new_line: {    // put a label

                average = 0;

                for ( int x = 0; x < oldPixels.width; x++) //find average

                        average = average + oldPixels.getRed(x, y);

                average = average / oldPixels.width;

                for (int x = 0; x < oldPixels.width; x++) { //for each pixel

                        r = oldPixels.getRed(x, y);

                        a = oldPixels.getAlpha(x, y);

                        if (r > average) { //if intensity>average, left edge

                                int start = x; //then store x. stop.

                        for (int i = x; i < oldPixels.width; i++) {

                                r = oldPixels.getRed(i, y);

                                if(r < average) {// find width to intensity<average

                                        newPixels.setPixel(

                                        start + (i - start) / 2, //set x+width/2=width

                                        y, 255, 255, 255, a);

                                        break new_line;// next line, otherwise nest pixel,keep going

                                        }

                                }

                        }

                }

        }makeImage();

}



//image class, read image

public Image createImage(int w, int h) {

        Image image = createImage(640, 640);

        Graphics g2 = image.getGraphics();

        }

Public void paint(graphics g) { //copy the result to the screen

        g.drawImage(image, 0, 0, this);

        }



//image producer

public void getImage() {

        //open up the image, by file name and wait for it!

        FileName = futil.open_file((Frame) this);

        

        image = Toolkit.getDefaultToolkit().getImage(fileName);  //long file name

        Util.waitForImage(this, image);



        //move the image, change its dimensions

        reshape(100, 100, image.getWidth(this), image.getHeight(this));



        set image title

        setTitle(fileNmae);

        show(); //show the image

}



public void getImage(Image image_) {

        

        image = image_;

        //move the image, change its dimensions

        reshape(100, 100, image.getWidth(this), image.getHeight(this));



        set image title

        setTitle(fileNmae);

        show(); //show the image

        }

}



public abstract class toolkit



get default toolkit_retrieves the toolkit instance to use 

when creating component peers.



A component in the AWT has a set of native peers( Button, etc.,)



for example, in SUN solaris

a solaris peer is written in motif

getImage()//get an image from a URL or file



public static void waitForImage(Component component, Image image) {

        

MediaTracker  Tracker = new MediaTracker(component);

        try{

                Tracker.addImage(image, 0);

                Tracker.waitForID(0);

        }

        catch (InterruptedException e){ … }







home Contents Index Prev Next



UBLOGO Last Update: 12/09/96
Copyright © 1996 - Douglas Lyon
Lyon@cse.bridgeport.edu