小编Joe*_*nes的帖子

脚本fu'未绑定变量'参数错误

所以我尝试运行本教程中的批处理代码:http://www.gimp.org/tutorials/Basic_Batch/

我将其复制并保存到.gimp-2.8脚本文件夹中

  (define (batch-unsharp-mask pattern
                              radius
                              amount
                              threshold)
  (let* ((filelist (cadr (file-glob pattern 1))))
    (while (not (null? filelist))
           (let* ((filename (car filelist))
                  (image (car (gimp-file-load RUN-NONINTERACTIVE
                                              filename filename)))
                  (drawable (car (gimp-image-get-active-layer image))))
             (plug-in-unsharp-mask RUN-NONINTERACTIVE
                                   image drawable radius amount threshold)
             (gimp-file-save RUN-NONINTERACTIVE
                             image drawable filename filename)
             (gimp-image-delete image))
           (set! filelist (cdr filelist)))))
Run Code Online (Sandbox Code Playgroud)

然后运行命令:

gimp-2.8 -i -b '(batch-unsharp-mask "*.png" 5.0 0.5 0)' -b '(gimp-quit 0)'
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

Error: ( : 1) eval: unbound variable: *.png
Run Code Online (Sandbox Code Playgroud)

这似乎不是脚本的问题; 可能是我称呼它的方式或我错过了一些东西,但我无法弄明白.

gimp script-fu

8
推荐指数
1
解决办法
5830
查看次数

比较两个元组的所有元素(具有all()功能)

所以我知道对元组的比较是按字典顺序进行的:

使用相应元素的比较,按字典顺序比较元组和列表.这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型并且具有相同的长度.

如果不相等,则序列的排序与它们的第一个不同元素相同.例如,cmp([1,2,x],[1,2,y])返回与cmp(x,y)相同的值.如果相应的元素不存在,则首先排序较短的序列(例如,[1,2] <[1,2,3]).

所以从这个:

>>> a = (100, 0)
>>> b = (50, 50)
>>> a > b
True
Run Code Online (Sandbox Code Playgroud)

但我想按顺序比较2个元组的所有元素,所以在功能上我想要类似的东西(使用上面的值):

>>> a > b
(True, False) #returned tuple containing each comparison
>>> all(a > b)
False
Run Code Online (Sandbox Code Playgroud)

作为一个例子在实践中,对于像屏幕坐标这样的东西,如果你想检查某些东西是否在(0,0)的屏幕"内部",但做了比较如coord>(0,0),如果x coord是大于0,但是y coord更小,它仍然会返回true,这不是在这种情况下所需要的.

作为一个子问题/讨论:
我不确定为什么以这种方式返回比较2个不同值的元组.你没有得到任何类型的索引,所以你从比较一个元组(不是测试相等)得到的唯一一点就是在元组的某个点上,其中一个比较会在它们出现时抛出一个真或假的值.不平等.你怎么能利用这个呢?

python comparison tuples language-design

5
推荐指数
1
解决办法
2万
查看次数

boost :: circular_buffer如何处理覆盖移位

我有2个进程:一个生产者和"消费者",它仍然将值保留在缓冲区中,它们将被覆盖.

但让消费者跟踪是一个问题.当缓冲区已满并且值被覆盖时,指向索引0的值是刚刚覆盖的值之前的值(即下一个最旧的值),刚刚插入的值是最后一个索引,移动所有值之间.

cb.push_back(0)
cb.push_back(1)
cb.push_back(2)

consumer reads to cb[1], cb[2] should == 2 when next read

cb.push_back(3)

cb[2] now == 1 effectively reading the old value
Run Code Online (Sandbox Code Playgroud)

有趣的是在循环缓冲区迭代器也保持相同的值,即使在缓冲开始被改写,并除非阅读当你达到这样的工作好吗end()迭代器,它会永远等于end()甚至将更多的值之后迭代器,所以那么你必须std::prev(iter, 1)经过你已经完成了消费,然后当你插入更多的值后再次阅读,std::next(iter, 1)这样你就不会读取你已经读过的值.

c++ boost circular-buffer boost-interprocess

1
推荐指数
1
解决办法
716
查看次数