脚本执行顺序不正确,为什么?

| 我正在尝试为GIMP编写基本脚本,但似乎并不想正常工作。做出选择后,应该遵循以下顺序:降低活动层,将选择范围扩展2px,使用前景色进行泛洪,提高活动层。最终产品应该是顶层上我线条下方的纯色。但是使用我编写的代码,它会跳过活动层,但会在顶层而不是下一层进行填充。这是我的代码:
(define (quick-fill image drawable)
  (gimp-undo-push-group-start image)
  (let* ((layer (car (gimp-image-get-active-layer image))))
    (gimp-selection-grow image 2)
    (gimp-image-set-active-layer image (aref (cadr (gimp-image-get-layers image)) 1))
    (gimp-bucket-fill drawable FG-BUCKET-FILL NORMAL-MODE 100 0 FALSE 0 0)
    (gimp-image-set-active-layer image (aref (cadr (gimp-image-get-layers image)) 0)))
  (gimp-undo-push-group-end image)
  (gimp-displays-flush))
    
已邀请:
如果您要通过在下面的图层上进行填充来使当前图层上的对象周围有2个像素的边框,那么该滤镜(至少看起来就是这样) -do),请尝试以下操作:
(define (quick-fill image)
  (gimp-undo-push-group-start image)
  (gimp-selection-grow image 2)
  (gimp-image-set-active-layer image (aref (cadr (gimp-image-get-layers image)) 1))
  (let* ((active-drawable (car (gimp-image-get-active-drawable image))))
    (gimp-bucket-fill active-drawable FG-BUCKET-FILL NORMAL-MODE 100 0 FALSE 0 0)
    (gimp-image-set-active-layer image (aref (cadr (gimp-image-get-layers image)) 0)))
  (gimp-undo-push-group-end image)
  (gimp-displays-flush))
几个注意事项: 1)您永远不会在
let*
部分中使用
layer
变量,因此已将其删除。 2)Gimp不会在活动图层上绘制或填充或做任何事情...而是在活动可绘制对象上起作用。如果要在顶层上填充时要在其下一层上填充,则意味着您要传递顶层的drawable,因此它将填充在顶层上。 ..将活动层切换到下面的层不会更改传入的可绘制对象的值。因此,在此修改中,我在
let*
部分中创建了一个新的
active-drawable
变量,在将活动层从顶层更改为其下层之后,将其初始化为当前活动的可绘制对象。这样,您将填充下面的图层的可绘制对象,而不是顶层的原始传入的可绘制对象。实际上,您根本不需要传入一个drawable参数,因为您可以从活动层中获取新的drawable(在此修改中已完成此操作)。     

要回复问题请先登录注册