0

我发现这个页面解释了一些 gimp 函数不会一致地返回值,所以我实现了一个 do while 循环以确保函数在使用之前返回对car。尽管如此,我还是得到了错误Error: ( : 1) car: argument 1 must be: pair,但我不确定这怎么可能,因为它应该继续运行该函数,直到它返回一对。

(define (script-fu-scratchpad drawable)
  (let* ((imgHeight 0)
         (imgWidth)
         (bpp)
         (pixel))
    (set! imgHeight (gimp-drawable-height drawable))
    (do ()
        [(pair? imgHeight)]
      (set! imgHeight (gimp-drawable-height drawable)))
    (set! imgHeight (car imgHeight))

    (set! imgWidth (gimp-drawable-width drawable))
    (do ()
        [(pair? imgWidth)]
      (set! imgWidth (gimp-drawable-width drawable)))
    (set! imgWidth (car imgWidth))

    (set! bpp (gimp-drawable-bpp drawable))
    (do ()
        [(pair? bpp)]
      (set! bpp (gimp-drawable-bpp drawable)))
    (set! bpp (car bpp))

    (display bpp) (newline)
    (set! pixel (cons-array bpp 'byte))
    (aset pixel 0 150)
    (aset pixel 1 150)
    (aset pixel 2 150)
    (aset pixel 3 0)

    (gimp-drawable-set-pixel drawable (/ imgHeight 2) (/ imgWidth 2) bpp pixel)
    (gimp-context-set-background '(100 100 100))
    (define county 0)
    (define countx 0)
    (do ()
        [(= countx imgWidth)]
      (do ()
          [(= county imgHeight)]
        (gimp-drawable-set-pixel drawable county countx bpp pixel)
        (set! county (+ county 1)))
      (set! countx (+ countx 1)))))

针对 GoZoner,我对其进行了编辑并收到以下错误:Error: (:1) car: argument 1 must be: pair

(define
    (script-fu-scratchpad drawable)
    (let*
        ( 
            (imgHeight 0)
            (imgWidth 0)
            (bpp 0)
            (pixel 0)
        )

        (set! imgHeight (gimp-drawable-height drawable))    
        (set! imgWidth (gimp-drawable-width drawable))

        (set! bpp (gimp-drawable-bpp drawable))
        (do ()
            [(pair? bpp)]
            (set! bpp (gimp-drawable-bpp drawable))
        )
        (set! bpp (car bpp))

        (display bpp) (newline)
        (set! pixel (cons-array bpp 'byte))
        (aset pixel 0 150)
        (aset pixel 1 150)
        (aset pixel 2 150)
        (aset pixel 3 0)

        (gimp-drawable-set-pixel drawable (/ imgHeight 2) (/ imgWidth 2) bpp pixel)
        (gimp-context-set-background '(100 100 100))
        (define county 0)
        (define countx 0)
        (do ()
            [(= countx imgWidth)]
            (do ()
                [(= county imgHeight)]
                (gimp-drawable-set-pixel drawable county countx bpp pixel)
                (set! county (+ county 1))
            )
            (set! countx (+ countx 1))
        )
    )
)
4

1 回答 1

0

有几件事。

  1. 在您的最高级别let*中,您应该初始化每个变量,而不是只初始化imgHeight或不初始化它们。实际方案要求全部初始化。

  2. 根据名称,我不希望(gimp-drawable-height drawable)返回列表/缺点;它应该以数字形式返回高度。所以:

    • 我无法想象(pair? imgHeight)会是真的

    • 我预计(car imgHeight)会失败 - 它显然是基于您报告的错误。

  3. 该函数aset可能作用于多维 ( (>= rank 2)) 数组。因此,它的“索引”参数应该不止一个整数。但是,也许aset只是vector-ref在 GIMP 的脚本变体中。

[编辑:更具体地说]我已经注释了你的代码

(set! bpp (gimp-drawable-bpp drawable))         ; bpp is NOT a pair
(do ()
    [(pair? bpp)]                               ; bpp is NOT a pair
 (set! bpp (gimp-drawable-bpp drawable)))
(set! bpp (car bpp))                            ; bpp is NOT a pair => ERROR
于 2014-04-21T14:09:27.227 回答