Class Picture
- java.lang.Object
-
- Picture
-
- All Implemented Interfaces:
java.awt.event.ActionListener,java.util.EventListener
public final class Picture extends java.lang.Object implements java.awt.event.ActionListenerThis class provides methods for manipulating individual pixels of an image using the RGB color format. The alpha component (for transparency) is not currently supported. The original image can be read from aPNG,GIF, orJPEGfile or the user can create a blank image of a given dimension. This class includes methods for displaying the image in a window on the screen or saving it to a file.Pixel (col, row) is column col and row row. By default, the origin (0, 0) is the pixel in the top-left corner, which is a common convention in image processing. The method
setOriginLowerLeft()change the origin to the lower left.The
get()andset()methods useColorobjects to get or set the color of the specified pixel. ThegetRGB()andsetRGB()methods use a 32-bitintto encode the color, thereby avoiding the need to create temporaryColorobjects. The red (R), green (G), and blue (B) components are encoded using the least significant 24 bits. Given a 32-bitintencoding the color, the following code extracts the RGB components:
Given the RGB components (8-bits each) of a color, the following statement packs it into a 32-bitint r = (rgb >> 16) & 0xFF; int g = (rgb >> 8) & 0xFF; int b = (rgb >> 0) & 0xFF;
int:int rgb = (r << 16) + (g << 8) + (b << 0);
A W-by-H picture uses ~ 4 W H bytes of memory, since the color of each pixel is encoded as a 32-bit
int.For additional documentation, see Section 3.1 of Computer Science: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne.
-
-
Constructor Summary
Constructors Constructor Description Picture(int width, int height)Creates awidth-by-heightpicture, withwidthcolumns andheightrows, where each pixel is black.Picture(java.io.File file)Creates a picture by reading the image from a PNG, GIF, or JPEG file.Picture(java.lang.String filename)Creates a picture by reading an image from a file or URL.Picture(Picture picture)Creates a new picture that is a deep copy of the argument picture.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactionPerformed(java.awt.event.ActionEvent e)Opens a save dialog box when the user selects "Save As" from the menu.int[]compare(Picture pic2, int margin)booleanequals(java.lang.Object oth)java.awt.Colorget(int col, int row)Returns the color of pixel (col,row) as aColor.javax.swing.JLabelgetJLabel()Returns aJLabelcontaining this picture, for embedding in aJPanel,JFrameor other GUI widget.intgetRGB(int col, int row)Returns the color of pixel (col,row) as anint.inthashCode()This operation is not supported because pictures are mutable.intheight()Returns the height of the picture.static voidmain(java.lang.String[] args)Unit tests thisPicturedata type.voidsave(java.io.File file)Saves the picture to a file in a PNG or JPEG image format.voidsave(java.lang.String name)Saves the picture to a file in either PNG or JPEG format.Picturescale(int factor)Scale the picture up by a factor, resulting in larger pixelated image.voidset(int col, int row, java.awt.Color color)Sets the color of pixel (col,row) to given color.voidsetFilename(java.lang.String fname)Sets the filename.voidsetOriginLowerLeft()Sets the origin to be the lower left pixel.voidsetOriginUpperLeft()Sets the origin to be the upper left pixel.voidsetRGB(int col, int row, int rgb)Sets the color of pixel (col,row) to given color.voidshow()Displays the picture in a window on the screen.java.lang.StringtoString()Returns a string representation of this picture.intwidth()Returns the width of the picture.
-
-
-
Constructor Detail
-
Picture
public Picture(int width, int height)Creates awidth-by-heightpicture, withwidthcolumns andheightrows, where each pixel is black.- Parameters:
width- the width of the pictureheight- the height of the picture- Throws:
java.lang.IllegalArgumentException- ifwidthis negativejava.lang.IllegalArgumentException- ifheightis negative
-
Picture
public Picture(Picture picture)
Creates a new picture that is a deep copy of the argument picture.- Parameters:
picture- the picture to copy- Throws:
java.lang.IllegalArgumentException- ifpictureisnull
-
Picture
public Picture(java.lang.String filename)
Creates a picture by reading an image from a file or URL.- Parameters:
filename- the name of the file (.png, .gif, or .jpg) or URL.- Throws:
java.lang.IllegalArgumentException- if cannot read imagejava.lang.IllegalArgumentException- iffilenameisnull
-
Picture
public Picture(java.io.File file)
Creates a picture by reading the image from a PNG, GIF, or JPEG file.- Parameters:
file- the file- Throws:
java.lang.IllegalArgumentException- if cannot read imagejava.lang.IllegalArgumentException- iffileisnull
-
-
Method Detail
-
getJLabel
public javax.swing.JLabel getJLabel()
Returns aJLabelcontaining this picture, for embedding in aJPanel,JFrameor other GUI widget.- Returns:
- the
JLabel
-
setOriginUpperLeft
public void setOriginUpperLeft()
Sets the origin to be the upper left pixel. This is the default.
-
setOriginLowerLeft
public void setOriginLowerLeft()
Sets the origin to be the lower left pixel.
-
setFilename
public void setFilename(java.lang.String fname)
Sets the filename.- Parameters:
fname- the filename
-
show
public void show()
Displays the picture in a window on the screen.
-
height
public int height()
Returns the height of the picture.- Returns:
- the height of the picture (in pixels)
-
width
public int width()
Returns the width of the picture.- Returns:
- the width of the picture (in pixels)
-
get
public java.awt.Color get(int col, int row)Returns the color of pixel (col,row) as aColor.- Parameters:
col- the column indexrow- the row index- Returns:
- the color of pixel (
col,row) - Throws:
java.lang.IllegalArgumentException- unless both0 <= col < widthand0 <= row < height
-
getRGB
public int getRGB(int col, int row)Returns the color of pixel (col,row) as anint. Using this method can be more efficient thanget(int, int)because it does not create aColorobject.- Parameters:
col- the column indexrow- the row index- Returns:
- the integer representation of the color of pixel (
col,row) - Throws:
java.lang.IllegalArgumentException- unless both0 <= col < widthand0 <= row < height
-
set
public void set(int col, int row, java.awt.Color color)Sets the color of pixel (col,row) to given color.- Parameters:
col- the column indexrow- the row indexcolor- the color- Throws:
java.lang.IllegalArgumentException- unless both0 <= col < widthand0 <= row < heightjava.lang.IllegalArgumentException- ifcolorisnull
-
setRGB
public void setRGB(int col, int row, int rgb)Sets the color of pixel (col,row) to given color.- Parameters:
col- the column indexrow- the row indexrgb- the integer representation of the color- Throws:
java.lang.IllegalArgumentException- unless both0 <= col < widthand0 <= row < height
-
scale
public Picture scale(int factor)
Scale the picture up by a factor, resulting in larger pixelated image.- Parameters:
factor- scale multiplier- Returns:
- the large Picture
- Throws:
java.lang.IllegalArgumentException- unless factor >= 1
-
toString
public java.lang.String toString()
Returns a string representation of this picture. The result is awidth-by-heightmatrix of pixels, where the color of a pixel is represented using 6 hex digits to encode the red, green, and blue components.- Overrides:
toStringin classjava.lang.Object- Returns:
- a string representation of this picture
-
hashCode
public int hashCode()
This operation is not supported because pictures are mutable.- Overrides:
hashCodein classjava.lang.Object- Returns:
- does not return a value
- Throws:
java.lang.UnsupportedOperationException- if called
-
save
public void save(java.lang.String name)
Saves the picture to a file in either PNG or JPEG format. The filetype extension must be either .png or .jpg.- Parameters:
name- the name of the file- Throws:
java.lang.IllegalArgumentException- ifnameisnull
-
save
public void save(java.io.File file)
Saves the picture to a file in a PNG or JPEG image format.- Parameters:
file- the file- Throws:
java.lang.IllegalArgumentException- iffileisnull
-
actionPerformed
public void actionPerformed(java.awt.event.ActionEvent e)
Opens a save dialog box when the user selects "Save As" from the menu.- Specified by:
actionPerformedin interfacejava.awt.event.ActionListener
-
equals
public boolean equals(java.lang.Object oth)
- Overrides:
equalsin classjava.lang.Object
-
compare
public int[] compare(Picture pic2, int margin)
-
main
public static void main(java.lang.String[] args)
Unit tests thisPicturedata type. Reads a picture specified by the command-line argument, and shows it in a window on the screen.- Parameters:
args- the command-line arguments
-
-