我想在 PostScript 中顺利运行动画。看我想要什么,让我直接切换到 PostScript。调用 ghostscript 和
200 dup scale .5 setgray 0 0 3 3 rectfill
我们现在有一个灰色方块。
0 setgray 0 1 3 1 rectfill
里面有一条黑色的条纹。我们现在将填充那个条纹,一次是白色
和黑色相继:
{1 setgray 0 1 3 1 rectfill 0 setgray 0 1 3 1 rectfill} loop
现在您将看到一些闪烁的黑白矩形
比原来的黑色条纹小。理想情况下,我们会看到
原来的灰色方块。或者差不多。我今天在哪里可以获得这样的功能?
查看更有趣的动画序列搜索魔法
大小为 5 的正方形:
wget http://www.complang.tuwien.ac.at/ulrich/gupu/l5.eps.gz
zcat l5.eps.gz | ghostscript -
几年前,我确实尝试解决这些问题。但它从未进入 ghostscript 或 Xfree。看
this page .也许现在有一些更好的想法?
编辑:在阅读到目前为止的回复后,让我在这里澄清一个问题。本质上,这个问题有两个独立的问题:
copypage
可以轻松实现增量更改。可悲的是,copypage
的语义仅存在于Level 1 和Level 2。在Level 3 中,copypage
的含义改为 showpage
.我做了 - 许多年前 - little modification to ghostscript将所有可见更改延迟到 copypage
或 showpage
.这样,单个XCopyArea
执行包含更改区域的操作 本地在服务器上(即显示器)。 进一步编辑:
要获得正确的语言级别,即级别 1 或 2(对于 ghostscript):
systemdict /.setlanguagelevel known {2 .setlanguagelevel} if
编辑:我添加此评论可能会吸引一些新的 postscript贡献者。
最佳答案
我们在 this thread on comp.lang.postscript 中探讨了其中的一些问题。 .
自 Level 2 标准发布以来,Postscript 是一种垃圾收集语言。您可以使用片段 -2 vmreclaim
禁用用户对象的收集。 ,但它的作用不大。您可以通过使用 -dNOGC
调用来禁用所有 ghostscript 垃圾收集。选项。这应该有助于防止图像的某些部分停顿和吐痰。
Ghostscript 有一个名为 flushpage 的非标准操作符。 ,它将渲染与执行同步。这有助于确保一切都在消失之前被看到。
- flushpage - On displays, flushes any buffered output, so that it is guaranteed to show up on the screen; on printers, has no effect
对于时序控制,似乎没有比简单的忙等待更好的方法了。
/smallpause {
/flushpage where{pop flushpage}if
50 sleep } def
/pagepause {
/flushpage where{pop flushpage}if
1000 sleep } def
/sleep {
usertime add {
10 {
1 100000 div pop %busy
.1 sin 257 cos atan pop %busy busy
} repeat
dup usertime le {exit}if
} loop pop
} def
where
flushpage 周围的守卫允许您将相同的代码发送到 ghostscript 以外的解释器(如打印机)。如果您有实际的 Display Postscript 服务器,您可以使用
wait
运算符(operator)而不是忙等待。
关于animation - 流畅的 PostScript 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8393604/