Lecture 13
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){
}
Last Update: 12/09/96
Copyright © 1996 - Douglas Lyon
Lyon@cse.bridgeport.edu