21
Using the Using the JImageViewer classes JImageViewer classes

Using the JImageViewer classes. JImageViewer classes JImageViewer class JImageViewer class ImagePanel class ImagePanel class Image class Image class

Embed Size (px)

Citation preview

Using the JImageViewer Using the JImageViewer classesclasses

JImageViewer classesJImageViewer classes JImageViewer classJImageViewer class ImagePanel classImagePanel class Image classImage class

JImageViewer classesJImageViewer classes JImageViewer classJImageViewer class

main program entry pointmain program entry point construct one w/ image file name and a new window construct one w/ image file name and a new window

w/ an image will appearw/ an image will appear menus & menu callbacksmenus & menu callbacks

implements ActionListenerimplements ActionListener contains:contains:

mImagePanelmImagePanel mImagemImage

JImageViewer classesJImageViewer classes ImagePanel classImagePanel class

displays image via paint methoddisplays image via paint method double buffereddouble buffered

draws image into temporary bufferdraws image into temporary buffer draws location string into temporary bufferdraws location string into temporary buffer then draws temporary bufferthen draws temporary buffer

contains reference to JImageViewer “parent” via contains reference to JImageViewer “parent” via mParentmParent

implements MouseMotionListenerimplements MouseMotionListener updates mMouseX and mMouseYupdates mMouseX and mMouseY does NOT listen to clicksdoes NOT listen to clicks

must implement MouseListener to receive mouse must implement MouseListener to receive mouse clicks (and a whole bunch of other events)clicks (and a whole bunch of other events)

JImageViewer classesJImageViewer classes Image classImage class

constructor & image data membersconstructor & image data members given an image file name, the ctor loads the image given an image file name, the ctor loads the image

into the member datainto the member data

JImageViewer classesJImageViewer classes Image classImage class

members:members: mW & mH (width and height of image)mW & mH (width and height of image) mMin & mMax (min and max scalar pixel value)mMin & mMax (min and max scalar pixel value) mIsColormIsColor

True if colorTrue if color False if grayFalse if gray

mImagemImage 1D int array of pixel values1D int array of pixel values Each int is eitherEach int is either

a single gray value ora single gray value or an rgb (red/green/blue) valuean rgb (red/green/blue) value

Cannot be drawn by JavaCannot be drawn by Java mOriginalImagemOriginalImage

original image dataoriginal image data mScreenImagemScreenImage

image data actually drawn in windowimage data actually drawn in window

JImageViewer classesJImageViewer classes Image classImage class

mImagemImage 1D int array of pixel values1D int array of pixel values each int is eithereach int is either

a single gray value ora single gray value or an rgb valuean rgb value

What is mImage.length?What is mImage.length? If color, how can we get at the individual rgb values?If color, how can we get at the individual rgb values?

Each rgb int contains contains:Each rgb int contains contains: 8 bits for red8 bits for red 8 bits for green8 bits for green 8 bits for blue8 bits for blue sometimes an 8 bits alpha blending value is present as wellsometimes an 8 bits alpha blending value is present as well How many different colors can we represent?How many different colors can we represent? What is gray in terms of rgb?What is gray in terms of rgb? How many different shades of grary can we represent?How many different shades of grary can we represent?

Representing colorRepresenting color

So given an integer containing an argb So given an integer containing an argb value, how can we get at the individual value, how can we get at the individual component values?component values?B is the least significant (8 bit) byte.B is the least significant (8 bit) byte.

Bits 7..0Bits 7..0

G is bits 15..8G is bits 15..8R is bits 23..16R is bits 23..16A is bits 31..24A is bits 31..24

Representing colorRepresenting color

B is the least significant (8 bit) byte.B is the least significant (8 bit) byte.bits 7..0bits 7..0 int b = mImage[i] & ?;int b = mImage[i] & ?;

Representing colorRepresenting color

B is the least significant (8 bit) byte.B is the least significant (8 bit) byte.bits 7..0bits 7..0 int b = mImage[i] & 0xff;int b = mImage[i] & 0xff;

Representing colorRepresenting color

G is bits 15..8G is bits 15..8 int g = mImage[i] ?;int g = mImage[i] ?;

Representing colorRepresenting color

G is bits 15..8G is bits 15..8 int g = (mImage[i] & 0xff00) >> 8;int g = (mImage[i] & 0xff00) >> 8;

Representing colorRepresenting color

R is bits 23..16R is bits 23..16 int r = mImage[i] ?;int r = mImage[i] ?;

Representing colorRepresenting color

R is bits 23..16R is bits 23..16 int r = (mImage[i] & 0xff0000) >> 16;int r = (mImage[i] & 0xff0000) >> 16;

ColorColor

Given individual rgb values (as 3 Given individual rgb values (as 3 int/bytes), how do we “pack” them into a int/bytes), how do we “pack” them into a single int?single int? int r = 12;int r = 12; int g = 14;int g = 14; int b = 92;int b = 92; int rgb = ?;int rgb = ?;

ColorColor

Given individual rgb values (as 3 Given individual rgb values (as 3 int/bytes), how do we “pack” them into a int/bytes), how do we “pack” them into a single int?single int? int r = 12;int r = 12; int g = 14;int g = 14; int b = 92;int b = 92; int rgb = (r<<16) | (g<<8) | b;int rgb = (r<<16) | (g<<8) | b;

ColorColor

Say we process our image data and wish Say we process our image data and wish to change the image that appears on the to change the image that appears on the screen?screen?

Where is the image data?Where is the image data?Where is the displayed image?Where is the displayed image?

ColorColor

Say we process our image data and wish Say we process our image data and wish to change the image that appears on the to change the image that appears on the screen?screen?

Where is the image data?Where is the image data? In mImage in the Image class.In mImage in the Image class.

Where is the displayed image?Where is the displayed image? In mScreenImage in the Image class.In mScreenImage in the Image class.

Displaying image dataDisplaying image data

mScreenImage in the Image class is of mScreenImage in the Image class is of type BufferedImage.type BufferedImage.

It is what appears in the window.It is what appears in the window.Allocated by:Allocated by:

mScreenImage = new BufferedImage(mScreenImage = new BufferedImage(mW, mH, BufferedImage.TYPE_INT_RGB );mW, mH, BufferedImage.TYPE_INT_RGB );

It is set/changed by:It is set/changed by:mScreenImage.setRGB( mScreenImage.setRGB(

0, 0, mW, mH, mImage, 0, mW );0, 0, mW, mH, mImage, 0, mW );

Displaying image dataDisplaying image data

mScreenImage.setRGB(mScreenImage.setRGB(

0, 0, mW, mH, mImage, 0, mW );0, 0, mW, mH, mImage, 0, mW );mImage must be in rgb formatmImage must be in rgb formatWhat do we do for gray data?What do we do for gray data?

Gray data may be more than 8 bits!Gray data may be more than 8 bits!