2016-01-24 106 views
1

我想设计一个名为add-frame的函数,它需要一个图像,并在所有四边都用一个像素的黑色边框包围它。这里是我所拥有的:覆盖在方案(球拍)

(define (horizontal-line x) 
(line x 0 "black")) 

(define (vertical-line x) 
(line 0 x "black")) 

(define (add-left-border height design color) 
    (overlay/align "left" "top" 
       (vertical-line height) 
       (square height design color))) 

(define (add-right-border height design color) 
    (overlay/align "right" "top" 
       (vertical-line height) 
       (square height design color))) 

(define (add-top-border height design color) 
    (overlay/align "right" "top" 
       (horizontal-line height) 
       (square height design color))) 

(define (add-bottom-border height design color) 
    (overlay/align "right" "bottom" 
       (horizontal-line height) 
       (square height design color))) 

(define (add-frame height design color) 
    (overlay (square height design color) 
      (add-left-border height design color) 
      (add-right-border height design color) 
      (add-top-border height design color) 
      (add-bottom-border height design color))) 

当我运行“添加框架”时,我返回一个带有左边框的正方形图像。如何让边框的其余部分出现在返回的广场上?

+0

您可以点击标签下方的“编辑”按钮编辑您的帖子。 –

+0

出于好奇,这是一个功课题吗? –

+0

如何定义“垂直线”和“水平线”? (我无法让你的程序运行) – soegaard

回答

1

该表达

(overlay/align "left" "top" 
       (vertical-line height) 
       (square height design color)) 

垂直线正确地添加到一个正方形的左侧。

而这种表达

(overlay/align "right" "top" 
       (vertical-line height) 
       (square height design color)) 

将正确的垂直线添加到一个正方形的右侧。

但是,如果您将两个图像放在一起 - 然后 ,因为它们的大小相同,您只能看到最上面的一个。

要解决此问题(部分),您可以在正方形的另一侧添加透明的 线。

更好的解决方案是将图像上的行添加到 。

也就是说变化,比如说,add-left-border到:

(define (add-left-border height design color image) 
    (overlay/align "left" "top" 
       (vertical-line height) 
       image)) 

这将增加对图像的顶部的左边框。

事情是这样的:

(define (horizontal-line x) 
    (line x 1 "black")) 

(define (vertical-line x) 
    (line 1 x "black")) 

(define (add-left-border height design color image) 
    (overlay/align "left" "top" 
       (vertical-line height) 
       image)) 

(define (add-right-border height design color image) 
    (overlay/align "right" "top" 
       (vertical-line height) 
       image)) 

(add-left-border 80 "solid" "red" 
       (add-right-border 80 "solid" "red" 
            (circle 40 "solid" "red"))) 

注:这是更好地为自动获得正确尺寸的图像上使用image-widthimage-height

+0

我可以得到单独的左右行显示在广场上。我无法让他们同时出现。 – Brett

+0

@布雷特嗨布雷特我已经添加了部分解决方案。 – soegaard