绘制较宽轮廓和尖锐边缘,AGG渲染问题

原文如下:

I have played quite a bit with AGG these last weeks and I have come
up with following problem: when painting wide outlines of paths with
sharp edges, AGG somehow messes up.

作者的回答:

Well, it‘s not that trivial. I honestly don‘t know a simple solution of that.
The stroke converter is the simplest and the fastest one, but it can produce
some defects. The defects are rooted from self-intersecting polygons that
appear wnen working with very sharp angles and wide strokes:http://www.antigrain.com/img/self_intersections.gifThese kinds of defects are eliminated when rendering if you use the non-zero
fill rule. However, in more complex cases there can be more than two
self-intersecting areas overlapping each other. As a result we can have some
holes even with non-zero filling.

Of course, it‘s possible to get rid of self-intersections analytically, but
it‘ll be much more complex (and much slower) algorithm. Ideally, we need to
calculate the Minkowsky Sum. Anyway, it should be a separate converter that
works slower, but produces perfect result.

交流过程:

> These kinds of defects are eliminated when rendering if you use the
> non-zero fill rule. However, in more complex cases there can be more than
> two self-intersecting areas overlapping each other. As a result we can
> have some holes even with non-zero filling.

In my case, I was using the non-zero fill rule, and I have indeed ran
into one of those complex cases.

> Of course, it‘s possible to get rid of self-intersections analytically,
> but it‘ll be much more complex (and much slower) algorithm. Ideally, we
> need to calculate the Minkowsky Sum. Anyway, it should be a separate
> converter that works slower, but produces perfect result.

Do you have any plans of implementing such a converter ?

可能的解决方案:

for example, Klaas‘s library does that, maybe not very fast and
stably for the moment, but the approach definitely worth considering.
时间: 2025-01-31 09:24:53

绘制较宽轮廓和尖锐边缘,AGG渲染问题的相关文章

wxWidgets第十七课 采用AGG渲染库

说明 已有的wxDC以及所有的派生类相关的设备环境均没有实现抗锯齿的功能,毕竟wxDC也只是对CDC的封装,只有GDI+才支持抗锯齿. 在如下的代码中定义rasterizer等为静态变量的核心原因是其在进行渲染计算的时候会分配大量的内存,容易造成内存碎片,当然agg::pixfmt_bgra32 和agg::renderer_scanline_aa_solid 等并没有进行什么内存分配,但是统一起见,所以构造为静态变量,实际上,还有申请的渲染缓存指向的区域也应该设置为静态变量,然后通过指定宽和高

用table绘制 等宽等间距的单元

css: .test1 { empty-cells: show;/*show:指定当表格的单元格无内容时,显示该单元格的边框.*/ border-spacing: 10px 10px;/*用长度值来定义行和单元格的边框在横向和纵向上的间距.不允许负值*/ border-collapse: separate;/*separate:边框独立;collapse:相邻边被合并*/ table-layout: fixed;/*fixed:固定布局的算法.在这算法中,水平布局是仅仅基于表格的宽度,表格边框的

Qt-字体轮廓的绘制

效果如图所示: 绘制的过程如下: 1 QFont font; 2 font.setPointSize(this->height() * 2 * mZoomRatio / 3); 3 font.setBold(true); 4 if(mDrawOutlined) 5 { 6 QFontMetrics metrics(font); 7 QPainterPath path; 8 QPen pen(QColor(0, 0, 0, 100)); 9 int penwidth = font.pointSiz

【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形

FindContours 在二值图像中寻找轮廓 int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int header_size=sizeof(CvContour), int mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) ); image  输入的 8-比特.单通道图像.

canvas绘制形状

栅格 之前简单模板中有个宽/高150px的canvas元素.如下图所示,canvas元素默认被网格所覆盖.通常来说网格中的一个单元相当于canvas元素中的一像素.栅格的起点为左上角(坐标为(0,0)).所有元素的位置都相对于原点定位.所以图中蓝色方形左上角的坐标为距离左边(Y轴)x像素,距离上边(X轴)y像素(坐标为(x,y)). 绘制矩形 不同于SVG,HTML中的元素canvas只支持一种原生的图形绘制:矩形.所有其他的图形的绘制都至少需要生成一条路径. canvas提供了三种方法绘制矩形

[转载]转载,opencv轮廓查找,匹配以及特征提取,实例

已有 9450 次阅读 2012-3-15 20:50 |系统分类:科研笔记|关键词:opencv 轮廓 轮廓的查找.表达.绘制.特性及匹配(How to Use Contour? Find, Component, Construct, Features & Match) 作者:王先荣 前言    轮廓是构成任何一个形状的边界或外形线.前面讲了如何根据色彩及色彩的分布(直方图对比和模板匹配)来进行匹配,现在我们来看看如何利用物体的轮廓.包括以下内容:轮廓的查找.表达方式.组织方式.绘制.特性.匹

Opencv图像识别从零到精通(23)----轮廓

当看到轮廓的时候,发现没有办法具体到什么, 因为关系轮廓的东西似乎有很多,例如检测轮廓,提取轮廓,轮廓跟踪,轮廓面积,周长,标记,匹配,还有一系列的外接最小矩形,圆形,椭圆,图像矩,填充孔洞等,不得不说东西真的很好. 轮廓其实最容易和边缘检测联系到一起,有很多的相同,但是我理解的是边缘是检测,是预处理,而轮廓就可能是你要用的特征. 一.函数:一个是找,一个是画 <span style="font-size:18px;">void findContours//提取轮廓,用于提

OPENCV图像轮廓检测

前面在图像转换的时候学到canny算子,可以检测出图像的轮廓信息,但是,该算子检测到的轮廓信息还需要我们手动的用眼睛去识别,而实际工程应用中,我们需要得到轮廓的具体数学信息,这就涉及到今天的主题,图像轮廓检测. 一.图像轮廓检测 在opencv中,轮廓对应着一系列的点的集合,opencv提供了一个函数,用来获得这些点的集合 API:void finContours(输入图像,输出轮廓点集,输出向量,int 轮廓检索模式,int 轮廓近似方法,Point 轮廓点的可选偏移量) 注:1.输入图像,是

用CSS3/JS绘制自己想要的按钮

我认为按钮的绘制分以下三个步骤 第一步,绘制按钮的轮廓 选择合适的html标签,设置轮廓的CSS /* html代码 */ <a href="#" class="button off"></a> body{ background-color: #E6C9B6; } /* CSS样式 */ /* 按钮轮廓 */ .button{ display: block; margin:100px auto; position: relative; wid