2.3 Images: "image.rkt"
The image teachpack provides a number of basic image construction
functions, along with combinators for building more complex images out of
existing images. Basic images include various polygons, ellipses and
circles, and text, as well as bitmaps.In the context of this
documentation, a bitmap denotes a special form of
image?, namely a collection of pixels associated with an image. It
does not refer to the bitmap% class. Typically such image-bitmaps
come about via the Insert Image... menu item in DrRacket
Existing images can be rotated, scaled, flipped, and overlaid on top of each other.
In some situations images are rendered into bitmaps (e.g. when being shown in
the DrRacket Interactions window) In order to avoid bad performance
penalties, the rendering process limits the area of the images to
about 25,000,000 pixels (which requires about 100 MB of storage).
2.3.1 Basic Images
Constructs a circle with the given radius, mode, and color.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Constructs an ellipse with the given width, height, mode, and color.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Constructs an image representing a line segment that connects the points
(0,0) to (x1,y1).
Examples:
> (line 30 30 "black") |
|
> (line -30 20 "red") |
|
> (line 30 -20 "red") |
|
Adds a line to the image
image, starting from the point (
x1,
y1)
and going to the point (
x2,
y2).
Unlike
scene+line, if the line passes outside of
image, the image
gets larger to accommodate the line.
Examples:
Adds a curve to image, starting at the point
(x1,y1), and ending at the point
(x2,y2).
The angle1 and angle2 arguments specify the
angle that the curve has as it leaves the initial point and
as it reaches the final point, respectively.
The pull1 and pull2 arguments control how
long the curve tries to stay with that angle. Larger numbers
mean that the curve stays with the angle longer.
Unlike scene+curve, if the line passes outside of image, the image
gets larger to accommodate the curve.
Examples:
Adds a curve to
image like
add-curve, except it fills in the region
inside the curve.
Added in version 1.2 of package htdp-lib.
Constructs an image that draws the given string, using the font size and color.
Examples:
> (text "Hello" 24 "olive") |
|
> (text "Goodbye" 36 "indigo") |
|
If the string contains newlines, the result pict will have multiple lines.
Example:
> (text "Hello and\nGoodbye" 24 "orange") |
|
The text size is measured in pixels, not points, so passing
24
to
text should result in an image whose height is
24
(which might not be the case if the size were measured in points).
Changed in version 1.7 of package htdp-lib: When called with strings that have newlines,
text returns multiple-line images.
(text/font | | string | | | | | | | font-size | | | | | | | color | | | | | | | face | | | | | | | family | | | | | | | style | | | | | | | weight | | | | | | | underline?) | | → | | image? |
|
string : string? |
font-size : (and/c integer? (<=/c 1 255)) |
color : image-color? |
face : (or/c string? #f) |
| family | | : | | (or/c "default" "decorative" "roman" "script" | "swiss" "modern" "symbol" "system" | 'default 'decorative 'roman 'script | 'swiss 'modern 'symbol 'system) |
|
|
| style | | : | | (or/c "normal" "italic" "slant" | 'normal 'italic 'slant) |
|
|
| weight | | : | | (or/c "normal" "bold" "light" | 'normal 'bold 'light) |
|
|
underline? : any/c |
Constructs an image that draws the given string, using a complete font specification.
The face and the family combine to give the complete typeface. If
face is available on the system, it is used, but if not then a default typeface
based on the family is chosen. The style controls if the face is italic
or not (on Windows and Mac OS, 'slant and 'italic are the same),
the weight controls if it is boldface (or light), and underline?
determines if the face is underlined. For more details on these arguments, see font%,
which ultimately is what this code uses to draw the font.
Examples:
> (text/font "Hello" 24 "olive" | "Gill Sans" 'swiss 'normal 'bold #f) |
|
|
> (text/font "Goodbye" 18 "indigo" | #f 'modern 'italic 'normal #f) |
|
|
> (text/font "not really a link" 18 "blue" | #f 'roman 'normal 'normal #t) |
|
|
The empty image. Its width and height are both zero and it does not draw at all.
Examples:
Combining an image with empty-image produces the
original image (as shown in the above example).
2.3.2 Polygons
Constructs a upward-pointing equilateral triangle.
The side-length argument
determines the
length of the side of the triangle.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Example:
Constructs a triangle with a right angle where the two sides adjacent
to the right angle have lengths side-length1 and side-length2.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Example:
Creates a triangle with two equal-length sides, of length side-length
where the angle between those sides is angle. The third
leg is straight, horizontally. If the angle is less than
180, then the triangle will point up and if the angle
is more, then the triangle will point down.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
To create a triangle given known sides and angles, the following
family of functions are useful:
They all construct a triangle oriented as follows:
Creates a triangle where the side lengths a, b, and, c are given by side-length-a,
side-length-b, and, side-length-c respectively.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Creates a triangle where the angle A and side length a and b, are given by angle-a,
side-length-b, and, side-length-c respectively.
See above for a diagram showing where which sides and which angles are which.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Creates a triangle where the side length a, angle B, and,
side length c given by side-length-a,
angle-b, and, side-length-c respectively.
See above for a diagram showing where which sides and which angles are which.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Creates a triangle where the side length a, side length b, and,
angle c given by side-length-a,
side-length-b, and, angle-c respectively.
See above for a diagram showing where which sides and which angles are which.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Creates a triangle where the angle A, angle B, and, side length c given by angle-a,
angle-b, and, side-length-c respectively.
See above for a diagram showing where which sides and which angles are which.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Creates a triangle where the angle A, side length b, and, angle C given by angle-a,
side-length-b, and, angle-c respectively.
See above for a diagram showing where which sides and which angles are which.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Creates a triangle where the side length a, angle B, and, angle C given by side-length-a,
angle-b, and, angle-c respectively.
See above for a diagram showing where which sides and which angles are which.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Constructs a square.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
> (square 40 "solid" "slateblue") |
|
> (square 50 "outline" "darkmagenta") |
|
Constructs a rectangle with the given width, height, mode, and color.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Constructs a four sided polygon with all equal sides and thus where opposite angles are equal to each
other. The top and bottom pair of angles is
angle
and the left and right are
(- 180 angle).
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
> (rhombus 40 45 "solid" "magenta") |
|
> (rhombus 80 150 "solid" "mediumpurple") |
|
Constructs a star with five points. The side-length argument
determines the side length of the enclosing pentagon.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Example:
> (star 40 "solid" "gray") |
|
Constructs an arbitrary regular star polygon (a generalization of the regular polygons).
The polygon is enclosed by a regular polygon with
side-count sides each
side-length long. The polygon is actually constructed by going from vertex to
vertex around the regular polygon, but connecting every
step-count-th vertex
(i.e., skipping every
(- step-count 1) vertices).
For example, if side-count is 5 and step-count is 2,
then this function produces a shape just like star.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Constructs a star-like polygon where the star is specified by two radii and a number of points.
The first radius determines where the points begin, the second determines where they end, and
the point-count argument determines how many points the star has.
Examples:
Constructs a regular polygon with side-count sides.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Constructs a regular polygon with side-count sides where each side
is curved according to the pull and angle arguments. The
angle argument controls the angle at which the curved version of
polygon edge makes with the original edge of the polygon. Larger the pull
arguments mean that the angle is preserved more at each vertex.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Added in version 1.3 of package htdp-lib.
Constructs a polygon connecting the given vertices.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Examples:
Changed in version 1.3 of package htdp-lib: Accepts pulled-points.
Adds a closed polygon to the image
image, with vertices as specified in
posns
(relative to the top-left corner of
image). Unlike
scene+polygon,
if the polygon goes outside the bounds of
image, the result is enlarged to accommodate both.
Note that when the mode is 'outline or "outline", the shape
may draw outside of its bounding box and thus parts of the image may disappear
when it is cropped. See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful explanation of the ramifications of this fact.
If the mode argument is 'outline or "outline", then the last
argument can be a pen struct or an image-color?, but if the mode
is 'solid or "solid", then the last argument must be an
image-color?.
Changed in version 1.3 of package htdp-lib: Accepts pulled-points.
Adds a closed polygon to the image
image, with vertices as specified in
posns
(relative to the top-left corner of
image). Unlike
add-polygon, if the
polygon goes outside the bounds of
image, the result is clipped to
image.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Examples:
Changed in version 1.3 of package htdp-lib: Accepts pulled-points.
2.3.3 Overlaying Images
Overlays all of its arguments building a single image. The first argument goes
on top of the second argument, which goes on top of the third argument, etc.
The images are all lined up on their centers.
Examples:
Overlays all of its image arguments, much like the
overlay function, but using
x-place and
y-place to determine where the images are lined up. For example, if
x-place and
y-place are both
"middle", then the images are lined up
on their centers.
Examples:
Just like
overlay, this function lines up its image arguments on top of
each other. Unlike
overlay, it moves
i2 by
x pixels to
the right and
y down before overlaying them.
Examples:
Overlays image i1 on top of i2, using x-place and y-place
as the starting points for the overlaying, and then adjusts i2 by x to the
right and y pixels down.
This function combines the capabilities of overlay/align and overlay/offset.
Examples:
Constructs an image by overlaying i1 on top of i2.
The images are initially lined up on their upper-left corners and
then i2 is shifted to the right
by x pixels and down by y pixels.
This is the same as (underlay/xy i2 (- x) (- y) i1).
See also overlay/offset and underlay/offset.
Examples:
Underlays all of its arguments building a single image.
It behaves like overlay, but with the arguments in the reverse order.
That is, the first argument goes
underneath of the second argument, which goes underneath the third argument, etc.
The images are all lined up on their centers.
Examples:
Underlays all of its image arguments, much like the
underlay function, but using
x-place and
y-place to determine where the images are lined up. For example, if
x-place and
y-place are both
"middle", then the images are lined up
on their centers.
Examples:
Just like
underlay, this function lines up its first image argument
underneath the second. Unlike
underlay, it moves
i2 by
x pixels to the right and
y down before underlaying them.
Examples:
Underlays image i1 underneath i2, using x-place and y-place
as the starting points for the combination, and then adjusts i2 by x to the
right and y pixels down.
This function combines the capabilities of underlay/align and underlay/offset.
Examples:
Constructs an image by underlaying i1 underneath i2.
The images are initially lined up on their upper-left corners and
then i2 is shifted to the right
by x pixels to and down by y pixels.
This is the same as (overlay/xy i2 (- x) (- y) i1).
See also underlay/offset and overlay/offset.
Examples:
Constructs an image by placing all of the argument images in a
horizontal row, aligned along their centers.
Example:
Constructs an image by placing all of the argument images in a horizontal row, lined
up as indicated by the y-place argument. For example, if y-place
is "middle", then the images are placed side by side with their centers
lined up with each other.
Examples:
Constructs an image by placing all of the argument images in a
vertical row, aligned along their centers.
Example:
Constructs an image by placing all of the argument images in a vertical row, lined
up as indicated by the x-place argument. For example, if x-place
is "middle", then the images are placed above each other with their centers
lined up.
Examples:
2.3.4 Placing Images & Scenes
Placing images into scenes is particularly useful when building worlds
and universes using 2htdp/universe.
Creates an empty scene, i.e., a white rectangle with a black outline.
Example:
The three-argument version creates a rectangle of the specified color with
a black outline.
Places image onto scene with its center at the coordinates
(x,y) and crops the resulting image so that it has the
same size as scene. The coordinates are relative to the top-left
of scene.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Examples:
Places each of
images into
scene like
place-image would, using the coordinates
in
posns as the
x
and
y arguments to
place-image.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Example:
Like
place-images, except that it places the images
with respect to
x-place and
y-place.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Adds a line to the image
scene, starting from the point (
x1,
y1)
and going to the point (
x2,
y2); unlike
add-line, this function crops the resulting image to the size of
scene.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Examples:
Adds a curve to scene, starting at the point
(x1,y1), and ending at the point
(x2,y2).
The angle1 and angle2 arguments specify the
angle that the curve has as it leaves the initial point and
as it reaches the final point, respectively.
The pull1 and pull2 arguments control how
long the curve tries to stay with that angle. Larger numbers
mean that the curve stays with the angle longer.
Unlike add-curve, this function crops the curve, only showing
the parts that fit onto scene.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Examples:
2.3.5 Rotating, Scaling, Flipping, Cropping, and Framing Images
Rotates image by angle degrees in a counter-clockwise direction.
Examples:
See also Rotating and Image Centers.
Scales image by factor.
The pen sizes are also scaled and thus draw thicker (or thinner)
lines than the original image, unless the pen was size
0. That pen size is treated specially to mean “the
smallest available line” and thus it always draws a one-pixel
wide line; this is also the case for 'outline and "outline"
shapes that are drawn with an image-color? instead of
a pen.
Examples:
Scales image by x-factor horizontally and by
y-factor vertically.
Examples:
Flips image left to right.
Flipping images with text is not supported (so passing flip-horizontal an image
that contains a text or text/font image inside somewhere signals an error).
Example:
Flips image top to bottom.
Flipping images with text is not supported (so passing flip-vertical an image
that contains a text or text/font image inside somewhere signals an error).
Example:
Crops image to the rectangle with the upper left at the point (x,y)
and with width and height.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Examples:
> (crop 0 0 40 40 (circle 40 "solid" "chocolate")) |
|
> (crop 40 60 40 60 (ellipse 80 120 "solid" "dodgerblue")) |
|
|
|
Crops image to a rectangle whose size is width and height
and is positioned based on x-place and y-place.
Some shapes (notably those with 'outline or "outline" as
the mode argument) draw outside of their bounding boxes and thus
cropping them may remove part of them (often the lower-left and lower-right
edges). See The Nitty Gritty of Pixels, Pens, and Lines (in the Image Guide)
for a more careful discussion of this issue.
Examples:
Added in version 1.1 of package htdp-lib.
Returns an image just like image, except
with a black, single pixel frame drawn around the
bounding box of the image.
Example:
Generally speaking, this function is useful to
debug image constructions, i.e., to see where
certain sub-images appear within some larger image.
Example:
Like
frame, except with the given
color.
Added in version 1.1 of package htdp-lib.
2.3.6 Bitmaps
DrRacket’s Insert Image ...
menu item allows you to insert images into your program text, and those images are treated
as images for this library.
Unlike all of the other images in this library, those images (and the other images created
by functions in this section of the documentation)
are represented as bitmaps, i.e., an array of colors (that can be quite large in some cases).
This means that scaling and rotating them loses fidelity in the image and is significantly
more expensive than with the other shapes.
See also the 2htdp/planetcute library.
(bitmap bitmap-spec)
|
|
bitmap-spec | | = | | rel-string | | | | | | id |
|
Loads the bitmap specified by bitmap-spec. If
bitmap-spec is a string, it is treated as a relative path.
If it is an identifier, it is treated like a require spec and used to
refer to a file in a collection.
Examples:
Goes out on the web and downloads the image at url.
Downloading the image happens each time this function is called, so
you may find it simpler to download the image once with a browser
and then paste it into your program or download it and use bitmap.
Loads the image from ps.
If ps is a relative path, the file is relative to
the current directory. (When running in DrRacket, the current
directory is set to the place where the definitions window is
saved, but in general this can be an arbitrary directory.)
Returns a list of colors that correspond to the colors in the
image, reading from left to right, top to bottom.
The list of colors is obtained by drawing the image on a white
background and then reading off the colors of the pixels that were drawn.
Examples:
> (image->color-list (rectangle 2 2 "solid" "black")) |
(list (color 0 0 0 255) (color 0 0 0 255) (color 0 0 0 255) (color 0 0 0 255)) |
|
(list (color 1 1 1 255) (color 2 2 2 255) (color 3 3 3 255) (color 4 4 4 255)) |
Constructs a bitmap from the given colors,
with the given width and height.
Example:
Freezing an image internally builds a bitmap, crops the image, draws the cropped image
into the bitmap and then
uses the bitmap to draw that image afterwards. Typically this is used as a performance
hint. When an image both contains many sub-images and is going to be drawn many times
(but not scaled or rotated),
using freeze on the image can substantially improve performance without changing how
the image draws (assuming it draws only inside its bounding box; see also
The Nitty Gritty of Pixels, Pens, and Lines).
If freeze is passed only the image argument, then it crops the image to its bounding
box. If it is given three arguments, the two numbers are used as the width and height and
the five argument version fully specifies where to crop the image.
2.3.7 Image Properties
Returns the width of i.
Examples:
Returns the height of i.
Examples:
Returns the distance from the top of the image to its baseline.
The baseline of an image is the place where the bottoms any letters line up,
but without counting the descenders, e.g. the tail on “y” or “g” or “j”.
Unless the image was constructed with text, text/font
or, in some cases, crop, this will be the same as its height.
Examples:
A cropped image’s baseline is the same as the image’s baseline, if the
cropping stays within the original image’s bounding box. But if the cropping actually
enlarges the image, then the baseline can end up being smaller.
Examples:
2.3.8 Image Predicates
This section lists predicates for the basic structures provided by the image library.
Additionally, images inserted into a DrRacket window are treated as
bitmap images, as are instances of image-snip% and bitmap%.
Determines if x is a mode suitable for
constructing images.
It can be one of
'solid, "solid", 'outline,
or "outline", indicating if the shape is
filled in or not.
It can also be an integer between 0 and 255 (inclusive)
indicating the transparency of the image. The integer 255 is
fully opaque, and is the same as "solid" (or 'solid).
The integer 0 means fully transparent.
Determines if
x represents a color. Strings, symbols,
and
color structs are allowed as colors.
For example,
"magenta", "black", 'orange, and 'purple
are allowed. Colors are not case-sensitive, so
"Magenta", "Black", 'Orange, and 'Purple
are also allowed, and are the same colors as in the previous sentence.
Additionally, spaces are not considered, so "light orange" is the same
color as "lightorange".
The complete list of colors is the same as the colors allowed in
color-database<%>, plus the color
"transparent", a transparent
color, as well as the following variants of the colors:
Brown, Cyan, Goldenrod, Gray, Green, Orange, Pink, Purple, Red, Turquoise, and Yellow.
Light Brown |
Medium Brown |
Dark Brown |
Medium Cyan |
Light Goldenrod |
Medium Gray |
Medium Green |
Light Orange |
Medium Orange |
Medium Pink |
Dark Pink |
Light Purple |
Dark Purple |
Light Red |
Medium Red |
Light Turquoise |
Medium Yellow |
Dark Yellow |
The
color struct defines a color with
red,
green,
blue, and
alpha components
that range from
0 to
255.
The red, green, and blue fields
combine to make a color, with the higher values meaning more of the given color.
For example, (make-color 255 0 0) makes a
bright red color and (make-color 255 0 255) makes a bright purple.
The alpha field controls the transparency of the color. A value of 255 means
that the color is opaque and 0 means the color is fully transparent.
The constructor, make-color, also accepts only three arguments, in which case
the three arguments are used for the red, green, and blue fields, and the
alpha field defaults to 255.
The
pulled-point struct defines a point with
x and
y coordinates, but also with
two angles (
langle and
rangle) and
two pulls (
lpull and
rpull).
These points are used with the polygon function
and control how the edges can be curved.
The first two pull and angle arguments indicate
how an edge coming into this point should be curved.
The angle argument indicates the angle as the edge
reaches (x,y) and a larger pull argument
means that the edge should hold the angle longer.
The last two are the same, except they apply to
the edge leaving the point.
Added in version 1.3 of package htdp-lib.
Determines if x is a placement option
for the vertical direction. It can be one
of
"top",
'top,
"bottom",
'bottom,
"middle",
'middle,
"center",
'center,
"baseline",
'baseline,
"pinhole", or
'pinhole.
Using "pinhole" or 'pinhole is only allowed when all of the
image arguments have pinholes.
See also image-baseline for more discussion of baselines.
Determines if x is a placement option
for the horizontal direction. It can be one
of "left",
'left,
"right",
'right,
"middle",
'middle,
"center",
'center,
"pinhole", or
'pinhole.
Using "pinhole" or 'pinhole is only allowed when all of the image
arguments have pinholes.
Determines if x is an angle, namely
a real number (except not +inf.0, -inf.0 or
+nan.0).
Angles are in degrees, so 0 is
the same as 360, 90 means rotating one
quarter of the way around a circle, and 180
is halfway around a circle.
Determines if x is an integer
greater than or equal to 3.
Determines if x is an integer greater than or equal to 1.
Determines if
x is a
posn whose
x and
y
fields are both
real? numbers.
The
pen struct specifies how the drawing library draws lines.
A good default for style is "solid", and
good default values for the cap and join fields
are "round".
Using 0 as a width is special; it means to always draw the
smallest possible, but visible, pen. This means that the pen will always
be one pixel in size, no matter how the image is scaled.
The cap determines how the ends of a curve is drawn.
The join determines how two lines are joined.
Examples:
> (line 400 100 (pen "red" 10 "long-dash" "round" "bevel")) |
|
> (line 400 100 (pen "red" 10 "short-dash" "round" "bevel")) |
|
> (line 400 100 (pen "red" 10 "long-dash" "butt" "bevel")) |
|
> (line 400 100 (pen "red" 10 "dot-dash" "butt" "bevel")) |
|
> (line 400 100 (pen "red" 30 "dot-dash" "butt" "bevel")) |
|
Determines if x is a valid pen style.
It can be one of
"solid", 'solid,
"dot", 'dot,
"long-dash", 'long-dash,
"short-dash", 'short-dash,
"dot-dash", or 'dot-dash.
Determines if x is a valid pen cap.
It can be one of
"round", 'round,
"projecting", 'projecting,
"butt", or 'butt.
Determines if x is a valid pen join.
It can be one of
"round", 'round,
"bevel", 'bevel,
"miter", or 'miter.
2.3.9 Equality Testing of Images
Two images are equal? if they draw exactly the same way at their current size
(not necessarily at all sizes) and, if there are pinholes, the pinholes are
in the same place.
This can lead to some counter-intuitive results. For example,
two completely different shapes that are the same size and are
drawn with the transparent color are equal:
2.3.10 Pinholes
A pinhole is an optional property of an image that identifies a point somewhere
in the image. The pinhole can then be used to facilitate overlaying images by
lining them up on their pinholes.
When an image has a pinhole, the pinhole
is drawn with crosshairs on the image.
The crosshairs are drawn with two one-pixel wide black lines (one horizontal and one vertical)
and two one-pixel wide white lines,
where the black lines is drawn .5 pixels to the left and above the pinhole, and the
white lines are drawn .5 pixels to the right and below the pinhole.
Accordingly, when the pixel is on an integral coordinate, then black and white lines all
take up a single pixel and in the center of their intersections is the actual pinholes.
See The Nitty Gritty of Pixels, Pens, and Lines for more details about pixels.
When images are overlay’d, underlay’d (or the variants of those functions),
placed beside, or above each other,
the pinhole of the resulting image is the pinhole of
the first image argument passed to the combining
operation. When images are combined with place-image
(or the variants of place-image),
then the scene argument’s pinhole is preserved.
Creates a pinhole in image at its center.
Creates a pinhole in image at the point (x,y).
Returns the x coordinate of image’s pinhole.
Returns the y coordinate of image’s pinhole.
Removes a pinhole from image (if the image has a pinhole).
Overlays all of the image arguments on their pinholes. If any of the
arguments do not have pinholes, then the center of the image is used instead.
Examples:
Underlays all of the image arguments on their pinholes. If any of the
arguments do not have pinholes, then the center of the image is used instead.
Examples:
2.3.11 Exporting Images to Disk
In order to use an image as an input to another program (e.g., Photoshop or
a web browser), it is necessary to represent it in a format that these programs
can understand.
The save-image function provides this functionality,
writing an image to disk using the PNG format. Since this
format represents an image using a set of pixel values, an image written to disk
generally contains less information than the image that was written, and cannot be scaled
or manipulated as cleanly (by any image program).
The save-svg-image function writes an SVG file format
representation of the file to the disk that, unlike save-image produces
an image that can still be scaled arbitrarily look as good as scaling the
image directly via scale.
Writes an image to the path specified by filename, using the
PNG format.
The last two arguments are optional. If present, they determine the width
and height of the save image file. If absent, the width and height of the image is used.
Writes an image to the path specified by filename, using the
SVG format.
The last two arguments are optional. If present, they determine the width
and height of the save image file. If absent, the width and height of the image is used.