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)) 配列に作用しています。したがって、その 'index' 引数には、1 つ以上の整数を指定する必要があります。しかし、おそらくaset単にvector-refGIMP のスクリプトバリアントにあるだけです。

[編集:より具体的に]コードに注釈を付けました

(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 に答える