agg::render_scanlines的不同

附上代码:

agg::rendering_buffer &rbuf = rbuf_window();//获取渲染缓存

agg::pixfmt_bgr24 pixf(rbuf);//组成像素

typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;
    renderer_base_type renb(pixf);//提供裁剪区域,只有在裁剪区域内才渲染有效

typedef agg::renderer_scanline_bin_solid<renderer_base_type> renderder_scanline_type;
    renderder_scanline_type rensl(renb);//自定义底层的渲染器

agg::rasterizer_scanline_aa<> ras;
    agg::scanline_u8 sl;
    ras.reset();

renb.clear(agg::rgba8(255,255,255));

agg::ellipse ell(320,320,230,230);
    agg::conv_stroke<agg::ellipse> stroke(ell);
    ras.add_path(stroke);
    rensl.color(agg::rgba8(255,0,0));
    agg::render_scanlines(ras,sl,rensl);

这种方法是不提供抗锯齿的效果,采用的是agg::renderer_scanline_bin_solid,

对比下面的代码:

agg::rendering_buffer &rbuf = rbuf_window();
    agg::pixfmt_bgr24 pixf(rbuf);

typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;
    renderer_base_type renb(pixf);
    renb.clear(agg::rgba8(255,255,255));

agg::rasterizer_scanline_aa<> ras;
    agg::scanline_u8 sl;
    ren_bas.clear(agg::rgba8(255,255,255));

agg::ellipse ell(320,320,230,230);
    agg::conv_stroke<agg::ellipse> stroke(ell);
    ras.add_path(stroke);
    agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
渲染的圆是抗锯齿的,效果非常的好,aa实际上就是anti-aliasing的意思。

时间: 2024-11-05 22:50:55

agg::render_scanlines的不同的相关文章

AGG函数参数使用的是弧度

2.1 定义 所谓"弧度的定义"就是说,1弧度的角大小是怎样规定的? 我们知道"度"的定义是,"两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧.当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度. 那么,弧度又是怎样定义的呢? 弧度的定义是:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧.当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧 摘自:http://sourceforge.net/p/vector-agg

agg::ellipse画圆

前言: path_storage是一个非常重要的顶点容器,并且也提供了很多的形状,在这里,我们看看path_storage是否可以描绘圆形,没有找到任何相关的函数支持直接画圆形,由于项目中并没有使用到任何贝塞尔曲线,所以也并不展开讨论相关的话题.因此引入了其他的顶点源,agg::ellipse去描绘一个圆形.该实例代码并没有引入坐标转换管道,该专业术语将会在一章描述.     //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵     //第一个参数是圆形圆心的X坐标,

agg::ellipse画圆(扩展)

引言:在刚开始的时候对agg::conv_stroke不了解,认为她与agg::conv_dash是一路的货色,并且分别代表实线和虚线,其实不然,agg::conv_stroke此类存储线的位置,宽度,线端点形状,线连接方式等信息  ,通过使用虚线渲染圆,充分理解了,她们之间如何配合使用. 小节一:虚线的使用方法 例子如下:     //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵     //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标     //第

agg::rasterizer_scanline_aa画填充颜色三角形

在上两节的时候,曾经提到agg::rasterizer_scanline_aa也支持画线,但是很遗憾,我们调用该类的move_to,line_to函数完全没有任何的效果,画线,是画不成的了,但是这里面其实是我们根本就没有设置线段的宽度,线段的端点形状,没有办法调用agg::conv_stroke啊!!并且还有一个问题,使用move_to替换掉move_to_d,之后,根本就无法渲染出来,并且尝试渲染一个矩形,惨败啊!! 代码如下: //Scanline Rasterizer光栅化,说她是画册,描

AGG第二十八课 rasterizer的填充规则

AGG提供了很多额外的接口给SVG调用,因此很多的初学者像我,需要先学习SVG,然后了解接口的意义,才能够真正的掌握该接口,例如miter_join的含义. 1知识储备 字面上理解就是填充的规则,不就是图形的填充吗?哪有什么规则可言.对于单一的图形没有问题,如果是渲染圆环,两个环之间的区域填充颜色,该怎么办?这个时候就需要指定一种规则,一种填充的规则. AGG提供了两种算法来判断该点是否在填充区域内,如果该点在填充区域,然后填充该点.对于一个简单的无交叉的路径,是非常容易判断的.但是,对于一个复

AGG第六课 函数参数使用弧度

2.1 定义 所谓"弧度的定义"就是说,1弧度的角大小是怎样规定的? 我们知道"度"的定义是,"两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧.当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度. 那么,弧度又是怎样定义的呢? 弧度的定义是:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧.当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧 摘自:http://sourceforge.net/p/vector-agg

(转)用AGG实现高质量图形输出(二)

本文上接<用AGG实现高质量图形输出(一)>,分别介绍了AGG显示流程中的各个环节. 上次讲了AGG的显示原理并举了一个简单的例子,这一篇文章开始讲AGG工作流程里的每个环节.为了方便对照,再放一次AGG显示流程 图 另外,上一篇文章里的例程也很重要,后面的例子都将基于这个代码. 下面,我们来考察AGG显示流程中的每个环节.理解每个环节最好的方法是编写实验代码,建议先参照这里建 立一个可以运行的AGG实验环境. 顶点源(Vertex Source) 顶点源是一种可以产生多边形所需要的“带命令的

wxWidgets第十七课 采用AGG渲染库

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

AGG第四十一课 AGG和GDI渲染字体大小对比

如下是GDI渲染字体的代码: CClientDC dc(this); CPen pen(PS_SOLID,3,RGB(0,255,255)); CPen* pOldPen; pOldPen=dc.SelectObject (&pen); dc.SelectObject (&pOldPen); CFont font; CFont* pOLdFont = NULL; font.CreatePointFont(10,_T("System"),&dc); pOLdFon