在Scheme中更改图像的颜色

时间:2012-10-17 01:14:52

标签: scheme

(define obamicon
  (lambda (clr2)
  (image-map (lambda (clr1) (image-ref clr1 (+ (color-ref clr1 'red)(color-ref clr1 'green)
                                          (color-ref clr1 'blue))))

(cond
      [(<= clr2 181) (color-set! clr2 [0 51 76])]
      [(and (>= clr2 182) (<= clr2 363)) (color-set! clr2 [217 26 33])]
      [(and (>= clr2 364) (<= clr2 545)) (color-set! clr2 [112 150 158])]
      [(and (>= clr2 546) (<= clr2 765)) (color-set! clr2 [252 227 166])]))))

我正在制作一个改变形象的节目,以模仿奥巴马竞选海报。图像映射假设采用每个像素并添加它们以获得总和,并在cond语句中检查该总和以查看要替换它的颜色。截至目前,我得到了

Exception in <=: #[color 0 0 0] is not a real number or clr1 is not bound.

任何有关错误的想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

那不是你的编译器抱怨语法错误,图像映射函数(或者更确切地说,它调用的函数)抱怨一个参数已被传递给它。

我不熟悉图像映射功能(它是标准库函数还是您编写的函数?)但我认为代码中存在结构错误。您使用两个参数调用 image-map - 一个是函数,另一个是 cond 语句的输出。我非常确定这不是您打算做的,或者当 cond 语句返回未定义的值时。我认为 image-map 在其第二个参数中没有任何用处,然后调用你的匿名函数没有值传递给它。然后你的匿名函数会抱怨。

所以理清你的代码结构。在图像映射的第二个参数中应该是什么?弄清楚如何把它放在那里。

答案 1 :(得分:0)

问题出现在(<= clr2 181)的陈述中,因为颜色无法与数字进行比较。因此,<=函数抱怨你没有传递两个数字,你传递了一个颜色和一个数字。