SVG 使用的三种管道

The current version of SVG contains 3 pipelines:

Simple polygons:
path_storage ->
 conv_curve -> 
  conv_transform ->
   conv_clip

Strokes:
path_storage ->
 conv_curve -> 
  conv_stroke ->
   conv_transform ->
    conv_clip

Contoured polygons:
path_storage ->
 conv_curve -> 
  conv_contour ->
   conv_transform ->
    conv_clip
> And is it doubly calculated for
> filling, then stroking (in
> case both apply)?

It is. Otherwise you would have to store the
intermediate result somewhere. But the good news is
that conv_curve works pretty fast, at least stroking
and clipping are much more time consuming tasks. 

The only obvious case when we can approximate the
curves in the last step is drawing text. But again,
when it‘s without stroking/outlining/contouring.

>  Also what exactly does conv_contour do?

Exactly half of the work conv_stroke does. :-) It
dilates or erodes polygons depending on the sign of
the width. I used it to eliminate the defects when
joining anti-aliased polygons:http://www.antigrain.com/img/polygon_join_defects.jpg> I hope you dont mind all these questions :)

Of course I don‘t. Afterall I myself started cooking
this porridge :-)

> If so, doesnt this give the same result each time,
> as its done before the
> conv_transform? 

Yes, it does, at least seems to do :-)
But the reality is more complex. Here‘s a
contadiction. Yes, we could transform paths before
approximating them with line segments. But conv_stroke
and conv_contour require already decomposed path. So,
the only case we can use this order (conv_transform ->
conv_curve) is a simple filled polygon without a
"border". But the situation is even worse. I use
conv_clip that performs polygonal clipping. Such kind
of a "vectorial" clipping can work with line segments
only, so, the curves must be decomposed before
clipping. Ideally it would be fine to decompose curves
as late as possible, but if the order of the
conversions is different solid and stroked paths will
be inconsistent:http://www.antigrain.com/img/conv_order.gifEventually I decided to set my jaw and to convert the
curves in the first pipeline step. Well, this is the
whole idea of the custom pipelines - in certain cases
you can use different conversion order for the sake of
performance.
时间: 2025-01-01 21:40:49

SVG 使用的三种管道的相关文章

AGG第四十课 SVG 使用的三种管道

The current version of SVG contains 3 pipelines: Simple polygons: path_storage -> conv_curve -> conv_transform -> conv_clip Strokes: path_storage -> conv_curve -> conv_stroke -> conv_transform -> conv_clip Contoured polygons: path_sto

[转载] 详述三种现代JVM语言--Groovy,Scala和Clojure

转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的一次主题演讲中,他作出了一个有洞察性的观点: Java的遗产将是平台,而不是程序设计语言. Java技术的原始工程师们作出了一个明智的决定,就是将编程语言与运行时环境分开,最终这使得超过200种语言能够运行在Java平台上.这种架构对于该平台的长期活力是至关重要的,因为计算机程序设计语言的寿命一般都

WPF路由事件二:路由事件的三种策略

一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实现一个操作,执行整个事件的调用则需要执行代码将事件串联起来). 路由事件的路由策略: 所谓的路由策略就是指:路由事件实现遍历元素的方式. 路由事件一般使用以下三

让网页图片变灰色的三种方法

我一直喜欢灰度图像因为我认为他们看起来更有艺术感.很多图片编辑如Photoshop很容易把你的彩色图像变成灰度.甚至有选择调整颜色深度和色调.不幸的是,这样的效果想做在网络上并不容易,因为浏览器有差异. 1.CSS Filter 使用CSS过滤器属性可能是最简单的方法把图像变成灰度.以往,IE浏览器有一个专有的CSS属性称为过滤应用自定义效果包括灰度. 现在,过滤器属性是CSS3规范的一部分,并支持在一些浏览器,Firefox.Chrome和Safari.以前,我们也提到Webkit过滤器,它不

网页图片变灰色的三种实现办法

1.CSS Filter 使用CSS过滤器属性可能是最简单的方法把图像变成灰度.以往,IE浏览器有一个专有的CSS属性称为过滤应用自定义效果包括灰度. 现在,过滤器属性是CSS3规范的一部分,并支持在一些浏览器,Firefox.Chrome和Safari.以前,我们也提到Webkit过滤器,它不仅将图像变成灰色也可以变成褐色和模糊效果. 添加如下CSS样式可以将图像变成灰色 img { -webkit-filter: grayscale(1);/* Webkit */ filter:gray;/

三种呈现错误页面的方式

三种呈现错误页面的方式 由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得到详细的出错信息,这无疑会在开发环境下增加查错纠错的难度.对于生产环境来说,我们也希望最终用户能够根据具体的错误类型得到具有针对性并且友好的错误消息.ASP.NET Core提供了相应的中间件帮助我们将定制化的错误信息呈现出来,这些中间件都定义在"Microsoft.AspN

三种多路复用IO实现方式:select,poll,epoll的区别

select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间. 此时需知道两个概念: 所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必

IO复用、多进程和多线程三种并发编程模型

I/O复用模型 I/O复用原理:让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的.在书上看到一个例子来解释I/O的原理,我觉得很形象,如果用监控来自10根不同地方的水管(I/O端口)是否有水流到达(即是否可读),那么需要10个人(即10个线程或10处代码)来做这件事.如果利用某种技术(比如摄像头)把这10根水管的状态情况统一传达到某一点,那么就只需要1个人在那个点进行监控就行了,而类似与select或epoll这样的多路I/O复用机制就好比是摄像头的功能

linux下find命令和文件的三种时间

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限. 1.命令参数:     pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录.   -print: find命令将匹配的文件输出到标准输出