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.