Transcript Document
Pictures
Looping through pixels.
Lab Review (1)
Objects
Instantiated from Class
Turtle myTut = new Turtle(myWorld);
new operator creates an instance of the
class
Constructor
Constructs (initializes) object
Has same name as class
May need to supply arguments as
parameters
Lab Review (2)
Methods
Send message to object by calling
method
myTut.turnLeft();
Argument can be supplied as a
parameter
myTut.forward(45);
Lab Review (3)
/**
* Draws a square with side width pixels at the current position
* in the world.
*
* @param width length of the side
*/
For main program:
public void drawSquare(int width)
{
/**
//draw side one
This program draws uses the
this.forward(width);
Turtle to draw nested squares.
// turn 90 deg counterclockwise
this.turnLeft();
@author S. Sigman
// draw side two
@version 2/4/2007
…
*/
}
Lab Review (4)
Using the Java packages require that
the class or classes be made available
to the compiler.
import statement used to do this
import java.awt.Color;
Put at top of the file
import java.awt.*; makes all classes in
java.awt available.
Problem
Manipulate a digital image
make a picture brighter/darker
alter the color in a picture
In computer science we must often
start by learning about the domain in
which we are writing programs.
Often requires us to learn more about our
language
Digital Images
How are images encoded?
Basic Idea: Represent image as a 2dimensional matrix of colored dots.
Human Visual Perception
Humans have low visual acuity
We see color and luminance (black and white)
using different neural pathways in our brain
Luminance is perceived with our peripheral
vision
Digital Images - Arrays
Arrays are a contiguous collections of cells
homogeneous data where each cell is identified by
an index.
int [] score = {23, 25, 22, 25};
score[0] is 23; score[1] is 25;
score[3] is ?
Arrays are objects. The assignment above is a
shorthand that hides the new operator.
int [] grades = new int [10]; // declares and
// allocates
grades[0] = 35;
Digital Images – Matrices
Matrices are 2-dimensional arrays
In Java a matrix is an array of arrays
An image has type: Pixel [][] pictData;
0
1
2
0
3
1
2
3
0
1
0
Row Major Order
pictData [r] [c]
1
Column Major Order
pictData [c] [r]
Digital Images - Color
Visible light is continuous
We have red, green, blue receptors
Wavelength: 370 nm – 730 nm
red peak: 560 nm
green peak: 550 nm
blue peak: 425 nm
Color we see is based upon signals
from recptors
Digital Images – Color Models
RGB – Red Green Blue
HSV – Hue Saturation and Value
CMYK – Cyan, Magenta, Yellow, Black
Used by printers (ie. Those who print
books, newsletters, pamplets, …)
Digital Image - RGP
Three Channels
Red, Green, Blue
Value Range: 0 – 255
24 bit color
16 million colors
Does not cover range of colors we perceive
32 bit color
16 million colors
alpha channel – transparency
Creating an Image
String fileName =
FileChooser.pickAFile();
Picture pict = new Picture(fileName);
// show the image
pict.show();
// explore the image
pict.expore();
Looking at Pixels
Pixel pix = pict.getPixel(0,0);
int xCord = pix.getX(); int yCord =
pix.getY();
int redVal = pix.getRed();
pix.setRed(255); pix.setGreen(0);
pix.setBlue(0);
pict.repaint(); // must repaint to show
// change
Looking at Pixels (2)
Pixel [] imgData = pict.getPixels();
pict.getPixel(10,100).setColor(Color.black);
pict.getPixel(11,100).setColor(Color.black);
pict.getPixel(12,100).setColor(Color.black);
pict.getPixel(13,100).setColor(Color.black);
pict.repaint();
This process is a little laborious!!
Changing The Green Component For
All Pixels
Push the green component to 255 for
all pixels.
Algorithm
Get an array of pixels in image
For each pixel in the image
set the green component to 255
How do we do the for each?
The For Each Loop
Allows us to repeat a set of Java
commands for each element in an
array.
Syntax
for (type variableName: array)
statement;
for multiple statements enclose in { }
Method to Maximize Green
public void maxGreen() {
// get the pixels
Pixel [] pixels = this.getPixels();
// set the pixels to max green
for(Pixel curPix : pixels) {
curPix.setGreen(255);
}
}
While Loops
Java provides other ways to construct
loops
While loop
loop while some condition is true
syntax
while (test)
statement;
Advice: always use braces
Maximize Green With a While Loop
public void maxGreen() {
// get the pixels
Pixel [] pixels = this.getPixels();
// set the pixels to max green
int curPos = 0;
while (curPos < pixels.length) {
pixels[curPos].setGreen(255);
curPos++; // same as curPos = curPos + 1;
}
}
For Loop
Loop with a built-in counter – also
called a counting loop
Syntax
for (init; limit test; change)
statement;
Advice: always use braces
Maximize Green With a For Loop
public void maxGreen() {
// get the pixels
Pixel [] pixels = this.getPixels();
// set the pixels to max green
for (int i=0;i < pixels.length; i++) {
pixels[i].setGreen(255);
}
}
Scope
For loop from previous slide
for (int i=0;i < pixels.length; i++) {
pixels[i].setGreen(255);
}
Where is i’s value know?
Just inside the block the defines the body of
the loop. This is i’s scope.
Look at scope in Picture.
Principle: Variables scope should be as
small as possible. Called localization.