所以我尝试运行本教程中的批处理代码: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)
这似乎不是脚本的问题; 可能是我称呼它的方式或我错过了一些东西,但我无法弄明白.
所以我知道对元组的比较是按字典顺序进行的:
使用相应元素的比较,按字典顺序比较元组和列表.这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型并且具有相同的长度.
如果不相等,则序列的排序与它们的第一个不同元素相同.例如,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个不同值的元组.你没有得到任何类型的索引,所以你从比较一个元组(不是测试相等)得到的唯一一点就是在元组的某个点上,其中一个比较会在它们出现时抛出一个真或假的值.不平等.你怎么能利用这个呢?
我有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)这样你就不会读取你已经读过的值.