PostScript中moveto单独stroke无效果的原因咨询(Ghostscript 9.52)
Ghostscript中
moveto stroke无显示的原因解析 这不是Ghostscript的Bug,完全符合PostScript语言规范。
PostScript的描边操作(stroke)要求路径中包含有效子路径,而单独的moveto并不构成有效子路径:
- 子路径必须是
moveto后跟随至少一条画线指令(如lineto、rlineto、curveto等),或者通过closepath闭合形成的路径。 - 仅执行
moveto的路径属于空路径,stroke会直接忽略,不会产生任何绘制效果。
你测试的几种情况对应的逻辑:
0 dup moveto stroke:只有起点定位,没有任何线段或闭合操作,无有效子路径,因此无显示。0 dup moveto closepath stroke:closepath将当前点与子路径起点(同一位置)连接,形成零长度的闭合子路径,满足描边条件;配合1 setlinecap(圆形端点)的设置,最终绘制出圆点。0 dup moveto 0 dup rlineto stroke:rlineto添加了一条零长度的线段,构成有效子路径,结合圆形端点设置,成功绘制出点。
PostScript规范明确规定,描边操作会跳过空的子路径,setlinecap仅作用于已有线段的端点样式,前提是存在可描边的有效路径。
内容的提问来源于stack exchange,提问作者U. Windl
相关产品推荐
相关产品推荐

