19
eleven colors and rasters

Eleven colors and rasters. Color objects [color name] Returns color with the specified name [color red green blue] Returns color with the specified amounts

  • View
    227

  • Download
    1

Embed Size (px)

Citation preview

eleven

colors and rasters

Color objects

[color name] Returns color with the specified name

[color red green blue] Returns color with the specified amounts of red, green, and blue

light Arguments should be 0-255

[red c] or c.R[green c] or c.G[blue c] or c.B Returns the amount of red/green/blue light in the color c

Color operations

[+ color color] Adds together the light of the two colors to form a new color

[× number color], [ ⁄ color number] Brightens/dims color by the factor number

[intensity color] Returns the total amount of light in the color from 0-255 This was called brightness in assignment 3

[gray intensity] Returns a neutral gray color with the specified intensity (0-255)

Vectors (aka points)

Used to represent positions in the imageor displacements between positions

[vector x y] or: [point x y] Returns a vector object with the specified coordinates

[vector-x p] or: [point-x p], p.X[vector-y p] or: [point-y p], p.Y Returns x (or y) coordinate of p

Vector operations

[+ vector vector], [− vector vector] Returns the sum/difference of two vectors (points) Sum shifts the first vector over by the amount of the second vector (or

vice-versa) Difference shifts the first one back

[× number vector], [ ⁄ vector number] Returns vector stretched/shrunk by a factor of number

[rotate-vector vector angle][rotate-vector-degrees vector angle]

Rotates the vector about the origin [magnitude vector]

Returns the length of the vector vector

What’s the differencebetween a vector and a point?

In this class, the terms are interchangeable Both are used in the literature They technically mean slightly different things, but the

distinctions don’t matter for this class We’re teaching you both terms, but you don’t need to worry

about them

I’ll adopt the convention of using [point x y] when I really mean a position in the image [vector x y] when I mean a shift or a direction, but not a specific

position in the image

I don’t care whether you follow this convention

The “dot” product

[dot p1 p2] Definitions:

The distance p1 extends in the direction of p2 (if p2 has length 1)

The distance p2 extends in the direction of p1 (if p1 has length 1)

[+ [× p1.X p2.X] [× p1.Y p2.Y]]

[× [magnitude p1] [magnitude p2] [cos [angle-between p1 p2]]]

Also known as Projection Scalar product Inner product

Enigmatic But very common in graphics, signal

processing (music), statistics

Measures Similarity between vectors p1 and p2 Distance p1 extends in the direction of

p2 (or vice-versa) When p1 is one unit long

(i.e. a “unit vector”) Returns the number of units p2

extends in the direction of p1.

Modern video cards have special hardware to compute dot products as fast as possible

Dot product examples

X axis

Y axis

p1 = [vector 1 0]

p2 = [vector 1.5 3]

p3 = [vector 0 2] [dot p1 p2] = 1×1.5+0×3 = 1.5[dot p1 p3] = 1×0 + 0×2 = 0[dot p3 p2] = 0×1.5+2×3 = 6

←1.5 units →

Rasters (a.k.a. bitmaps)

A bitmap is a specific kind of data object that represents an image E.g. JPEG files, GIF files, paint files But not like draw programs or the pictures we’ve been

making so far

Has a prespecified width and height (in pixels) It allows you to explicitly retrieve (or change) the

color at each pixel

Bitmap procedures

[new Bitmap string] Reads in the the jpeg or gif file with name string Converts it to internal bitmap format and returns it

[height bitmap], [width bitmap] Returns the width/height of a bitmap, in pixels

[pixel bitmap x y] Returns the specified pixel of the bitmap

[bitmap-from-procedure procedure width height] Makes a bitmap of size width×height Repeatedly calls procedure with the location (a point) of each

pixel to get the color of the pixel

Ian Horswill

Example

The procedure[p → [color p.X p.X p.X]] Returns a color with

equal amounts of red, green, and blue light

So it’s grey It’s brightness varies

with its horizontal position

► [bitmap-from-procedure [p → [color p.X p.X p.X]] 256 256]

Comparing to iterated-group

This is sort of like iterated-group You give it a

procedure And a number of times

to run it(well, two numbers)

And it makes a picture

► [bitmap-from-procedure [p → [color p.X p.X p.X]] 256 256]

Comparing to iterated-group

Except: The procedure you

pass in Returns a color, not a

shape Takes a position as an

input

Takes two count parameters (one for width, one for height)

► [bitmap-from-procedure [p → [color p.X p.X p.X]] 256 256]

Example 2

The procedure[p → [color p.X 0 p.Y]] Changes red and blue

independently So hue varies over

space

► [bitmap-from-procedure [p → [color p.X 0 p.Y]] 256 256]

Example 3

► [define sine-wave [n → [+ 128 [× 127 [sin [∕ n 20]]]]]]<Procedure sine-wave>

► [bitmap-from-procedure [p → [color 0 [sine-wave p.X] [sine-wave p.Y]]] 256 256]

Bitmap procedures

[map-bitmap procedure bitmap] Makes a new bitmap of the same size as

bitmap Calls procedure with each pixel of bitmap Procedure returns the color of the respective

pixel for the new bitmap Returns the new bitmap

Ian Horswill

Comparing to iterated-group

Iterated-group and bitmap-from-procedure construct pictures from scratch But computing each element (shape or pixel color) as

specified by a procedure

Map-bitmap constructs a new image from an old image By changing the color of each pixel As specified by a procedure

Extracting color components of an image

► [define cones [new Bitmap “c:/documents and settings/ian/my documents/cones.jpg”]]

Extracting color components of an image

► [define gray [i → [color i i i]]]

<Procedure gray>► [map-bitmap [c →

[gray [red c]]] cones]

► [map-bitmap [c → [gray [green c]]] cones]

Note: the gray procedure is already built in