Version: 5.0.1.2
Picturing Programs Teachpack
1 About This Teachpack
Provides a variety of functions for combining and manipulating images
and running interactive animations.
It’s intended to be used with the textbook
Picturing Programs.
2 Installation
If you’re reading this, you’ve probably already installed the teachpack successfully,
but if you need to install it on a different machine, ...
start DrScheme
switch languages to “Use the language declared in the
source” and click “Run”
in the Interactions pane, type
after a few seconds, you should see the message
Wrote file “picturing-programs.rkt” to installed-teachpacks directory.
switch languages back to one of the HtDP languages, like Beginning Student
either
in the Definitions pane, type
(require installed-teachpacks/picturing-programs) or
from the Language menu, choose "Add
Teachpack..." and select "picturing-programs.rkt"
click "Run"
3 Functions from image.rkt and universe.rkt
This package includes all of
the image teachpack and
and
the universe teachpack,
so if you’re using this teachpack, don’t also load either of those.
See the above links for how to use those teachpacks.
It also supersedes the older tiles and sb-world teachpacks,
so if you have those, don’t load them either; use this instead.
This package also provides the following additional functions:
4 New image functions
Rotates an image 90 degrees clockwise.
Rotates an image 90 degrees counterclockwise.
Rotates an image 180 degrees around its center.
Chops off the specified number of pixels from the top of the image.
Chops off the specified number of pixels from the bottom of the image.
Chops off the specified number of pixels from the left side of the image.
Chops off the specified number of pixels from the right side of the image.
Returns the given image unaltered. Useful as a draw handler for animations whose model is an image.
5 Pixel functions
The above functions allow you to operate on a picture as a whole, but sometimes
you want to manipulate a picture pixel-by-pixel.
5.1 Colors and pixels
Given a color name like "red", "turquoise", "forest green",
etc., returns the corresponding
color struct, showing the red, green, and blue components. If the name isn’t
recognized, returns
false.
Gets the color of a specified pixel in the given image. If x and/or y are outside the
bounds of the image, returns black.
5.2 Specifying the color of each pixel of an image
Applies the given function to each pixel in a given image, producing a new image the same
size and shape. For example,
produces a copy of my-picture with all the red leached out,
leaving only the blue and green components.
(define (apply-gradient x y old-color) |
(make-color (min (* 3 x) 255) 0 (min (* 3 y) 255))) |
|
(map-image apply-gradient my-picture) |
produces a picture the same size and shape as my-picture,
but with a smooth color gradient with red increasing from left to
right and blue increasing from top to bottom.
A version of map-image for students who don’t know about structs yet. Each of the three given functions is assumed
to have the contract
num(x) num(y) num(r) num(g) num(b) -> num For each pixel in the original picture, applies the three
functions to the x coordinate, y coordinate, red, green, and blue components of the picture.
The result of the first function is used as the red component, the second as green, and the third as blue
in the corresponding pixel of the resulting picture.
For example,
(define (zero x y r g b) 0) |
(define (same-g x y r g b) g) |
(define (same-b x y r g b) b) |
(map3-image zero same-g same-b my-picture) |
produces a copy of my-picture with all the red leached out,
leaving only the blue and green components.
(define (3x x y r g b) (min (* 3 x) 255)) |
(define (3y x y r g b) (min (* 3 y) 255)) |
(map3-image 3x zero 3y my-picture) |
produces a picture the same size and shape as my-picture,
but with a smooth color gradient with red increasing from left to
right and blue increasing from top to bottom.
Builds an image of the specified size and shape by calling the specified function
on the coordinates of each pixel. For example,
produces a fuzzy version of the given picture by replacing each pixel with a
randomly chosen pixel near it.
Returns a constant-valued function suitable for use in
map-image or
build-image.
The input to
change-to-color may be either a
color struct or a color name from
the standard color-name database. For example,
(map-image (change-to-color "turquoise") my-picture)
returns a picture with the same size, shape, and mask as my-picture, but all turquoise, while
(build-image 50 30 (change-to-color (make-color 0 100 200))) Not specific to colors, but useful if you’re building colors by arithmetic.
For example,
(define (bad-gradient x y) |
(make-color (* 2.5 x) (* 1.6 y) 0)) |
(build-image 50 30 bad-gradient) |
(define (good-gradient x y) |
(make-color (real->int (* 2.5 x)) (real->int (* 1.6 y)) 0)) |
(build-image 50 30 good-gradient) |
The version using bad-gradient crashes because color components must be exact integers.
The version using good-gradient works.
5.3 Transparency
Some image formats support transparency, meaning that part of the image is
ignored when layering it with other images.
Checks transparency: returns
false if the specified pixel in the image is transparent,
true if not.
A maybe-color is either a color or false, which is treated as transparent.
Like
map-image, but the function will receive
false for any transparent pixel, and
any place that it returns
false will be treated as a transparent pixel.
Like
build-image, but any place that the function returns
false will be treated
as a transparent pixel.
6 Input and Output
This teachpack also provides several functions to help in testing
I/O functions (in Advanced Student language; ignore this section if
you’re in a Beginner or Intermediate language):
Calls
thunk, which presumably uses
read,
in such a way that
read reads from
input rather than from
the keyboard.
Calls
thunk, which presumably uses
display,
print,
write, and/or
printf, in such a way that its output is
accumlated into a string, which is then returned.
Calls
thunk, which presumably uses
read,
in such a way that
read reads from the specified file
rather than from the keyboard.
Calls
thunk, which presumably uses
display,
print,
write, and/or
printf, in such a way that its output is
redirected into the specified file.
Calls
thunk, which presumably uses
read,
in such a way that
read reads from the HTML source of the
Web page at the specified URL rather than from the keyboard.