1.1 操作图像: "image.rkt"
(require htdp/image) | package: htdp-lib |
注意:该库已被废弃;请改用2htdp/image。在可预见的将来,我们将继续支持现有程序中的教学包。
本教学包提供创建和操作图像的函数。创建的基本彩色图像为空心或实心形状。其他函数允许组合图像。
1.1.1 图像
1.1.2 模式和颜色
Mode (one-of/c 'solid 'outline "solid" "outline")
Mode(模式)用来指定绘制图形时是将其填充满颜色还是只绘制边框。
struct
(struct color (red green blue) #:extra-constructor-name make-color) red : (and/c natural-number/c (<=/c 255)) green : (and/c natural-number/c (<=/c 255)) blue : (and/c natural-number/c (<=/c 255))
RGB color?
RGB通过红色、绿色和蓝色的色调描述颜色(例如,(make-color 100 200 30))。
Color (or/c symbol? string? color?)
Color是颜色符号(例如'blue)、颜色字符串(例如"blue")或RGB结构体。
函数
(image-color? x) → boolean?
x : any
1.1.3 创建基本图形
DrRacket可以插入来自文件系统的图像。请尽可能使用PNG格式。也可以使用以下函数创建基本图形。
函数
w : (and/c number? (or/c zero? positive?)) h : (and/c number? (or/c zero? positive?)) m : Mode c : Color
函数
w : (and/c number? (or/c zero? positive?)) h : (and/c number? (or/c zero? positive?)) m : Mode c : Color
函数
n : (and/c number? (>=/c 2)) outer : (and/c number? (>=/c 1)) inner : (and/c number? (>=/c 1)) m : Mode c : Color
函数
(regular-polygon s r m c [angle]) → image?
s : side r : number? m : Mode c : Color angle : real? = 0
1.1.4 基本图像属性
要了解如何操作图像,先需要了解图像的基本属性。
函数
(image-width i) → integer?
i : image?
函数
(image-height i) → integer?
i : image?
对于图像的组合,必须了解pinhole(针孔)的概念。每张图片都带有pinhole。 对于使用前述函数创建的图像,除了line和text之外,pinhole都位于形状的中心。 text函数将pinhole放在图像的左上角, 而line将pinhole放在线的开头(也就是说,如果line的前两个参数线为正数,那么pinhole位于左上角)。 当然,pinhole可以移动,并且图像组合物根据自己的规则定位pinhole。 不确定的话,可以随时找到pinhole的位置,或者根据需要放置pinhole。
函数
(put-pinhole i x y) → image?
i : image? x : number? y : number?
函数
(move-pinhole i delta-x delta-y) → image?
i : image? delta-x : number? delta-y : number?
1.1.5 图像的组合
可以组合图像,也可以在组合中寻找图像。
函数
(overlay/xy img delta-x delta-y other) → image?
img : image? delta-x : number? delta-y : number? other : image?
新图像的pinhole与第一个图像的pinhole相同。
(overlay img (move-pinhole other (- delta-x) (- delta-y)))
函数
(image-inside? img other) → boolean?
img : image? other : image?
将此函数与jpeg图像一起使用时要小心。如果使用图像编辑程序裁剪jpeg图像然后保存之, 由于JPEG图像的压缩,因此image-inside?无法识别裁剪后的图像。
函数
(find-image img other) → posn?
img : image? other : image?
1.1.6 图像的操作
图像也可以被缩小。这些“缩小”函数消除不再需要的像素,从而减小图像。
1.1.7 场景
scene(场景)是pinhole位于其左上角的图像,即pinhole-x和pinhole-y都返回0。
对2htdp/universe和htdp/world教学包来说, 场景特别有用,因为它们在画布中只能显示scene。
函数
(empty-scene width height) → scene?
width : natural-number/c height : natural-number/c
函数
(nw:rectangle width height solid-or-outline c) → image? width : natural-number/c height : natural-number/c solid-or-outline : Mode c : Color
函数
(scene+line s x0 y0 x1 y1 c) → scene?
s : scene? x0 : number? y0 : number? x1 : number? y1 : number? c : Color
1.1.8 其他图像处理和创建函数
最后这组函数从图像中提取成分颜色,并将颜色表转换为图像。
值
List-of-color : list?
函数
(image->color-list img) → List-of-color
img : image?
函数
(color-list->image l width height x y) → image?
l : List-of-color width : natural-number/c height : natural-number/c x : natural-number/c y : natural-number/c
后续的函数也提供alpha通道信息。Alpha通道是衡量透明度的标准;0表示完全不透明,255表示完全透明。
struct
(struct alpha-color (alpha red green blue) #:extra-constructor-name make-alpha-color) alpha : (and/c natural-number/c (<=/c 255)) red : (and/c natural-number/c (<=/c 255)) green : (and/c natural-number/c (<=/c 255)) blue : (and/c natural-number/c (<=/c 255))
函数
(image->alpha-color-list img) → (list-of alpha-color?)
img : image?
函数
(alpha-color-list->image l width height x y) → image?
l : (list-of alpha-color?) width : integer? height : integer? x : integer? y : integer?