animation - 流畅的 PostScript 动画

标签 animation x11 ghostscript postscript double-buffering

我想在 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将所有可见更改延迟到 copypageshowpage .这样,单个XCopyArea执行包含更改区域的操作 本地在服务器上(即显示器)。
  • 视觉显示上的实际变化应该如何同步,以避免在描述的图形中不存在的伪影?您看到的不规则闪烁不是 PostScript 的特权,它似乎存在于我迄今为止见过的任何双缓冲系统中。只需尝试在您认为合适的任何系统中对其进行编程。

  • 进一步编辑:

    要获得正确的语言级别,即级别 1 或 2(对于 ghostscript):
    systemdict /.setlanguagelevel known {2 .setlanguagelevel} if
    

    编辑:我添加此评论可能会吸引一些新的 贡献者。

    最佳答案

    我们在 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/

    相关文章:

    css - 使用 CSS/SCSS 在页面上动画显示元素

    jquery - 通过 jquery 动画边距

    python - 为什么这可以解决 matplotlib 的 'no $DISPLAY environment' 问题?

    pdf - 从 PDF 中提取文本内容

    text - 如何在 PostScript 中使页面上的旋转文本居中

    Android - 具有弹跳效果的动画弹出对话框

    animation - 如何在svg中实现闪烁效果?

    ssh - 在 Windows 上使用 GVim 编辑远程 Linux 文件?

    java - XLib:使用正确翻译的弹出窗口来代替Java窗口

    java - Ghost4j 不使用默认的 ghostscript 安装