在Scheme中更改图像的颜色

在Scheme中更改图像的颜色,scheme,Scheme,我正在制作一个改变形象的程序,以模仿奥巴马的竞选海报。图像映射假定获取每个像素并将它们相加以获得一个和,然后在cond语句中检查该和,以查看将替换它的颜色。到现在为止,我得到了 (define obamicon (lambda (clr2) (image-map (lambda (clr1) (image-ref clr1 (+ (color-ref clr1 'red)(color-ref clr1 'green)

我正在制作一个改变形象的程序,以模仿奥巴马的竞选海报。图像映射假定获取每个像素并将它们相加以获得一个和,然后在cond语句中检查该和,以查看将替换它的颜色。到现在为止,我得到了

(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语句的输出。我很确定这不是您想要做的,或者如果是,那么cond语句将返回一个未定义的值。我认为image map在其第二个参数中没有接收到任何有用的内容,然后调用匿名函数,而没有值传递给它。你的匿名函数会抱怨


所以,整理一下你的代码结构。图像映射的第二个参数应该是什么?找出如何把它放在那里。

问题在于那些看起来像德韦恩的陈述,是你得到的所有一个错误,还是这两个不同的错误在不同的情况下?如果是后一种情况,哪些输入提供了第一个错误,哪些输入提供了第二个错误?您将如何添加像素的所有颜色并测试它以查看您所处的范围?将您的问题分解为更小的部分。你的问题有两部分。攻击第一部分。如何添加像素的所有颜色?你已经在代码中做了,对吗?你能把它变成一个助手函数吗?称之为颜色强度或类似的东西,让它接收一个像素并返回其所有组件的总和。通过这种方式,你可以更容易地做一些事情,比如测试颜色的强度,通过使用词汇表来表示Exception in <=: #[color 0 0 0] is not a real number or clr1 is not bound.