Scanline Rasterizer
Scanline Rasterizer能够把顶点数据转换成一组水平扫描线,扫描线由一组线段(Span)组成,线段(Span)包含了起始位置、长度和覆盖率(可以理解 为透明度)信息。AGG的抗锯齿(Anti-Aliasing)功能也是在这时引入的。
扫描线Scanline
扫描线是一种保存span的容器,span用于表示一小条(水平方向)细线。图像中同一行的span组成一个Scanline。
头文件
#include <agg_scanline_u.h> // scanline_u8,scanline32_u8#include <agg_scanline_p.h> // scanline_p8,scanline32_p8#include <agg_scanline_bin.h> // scanline_bin,scanline32_bin类型
scanline_bin,scanline32_bin不携带AA信息的span容器。scanline32_bin中的32代表坐标位数,一般16位已经足够了,所以前一版 本用得更多些(下同)
scanline_u8,scanline32_u8unpacked版的span容器,用每个span来保存各自的线段信息
scanline_p8,scanline32_p8packed版的span容器,相同属性的span会合并成一个
成员类型

struct span;线段数据,其中的成员变量有:x起始位置,len长度,*covers覆盖率
typename iterator,const_iterator;span迭代器
typename cover_type;span中covers类型(覆盖率)
成员方法
iterator begin();
unsigned num_spans();用于遍历span,begin()取得指向第一个span的迭代器
num_spans()取得容器中span的数目
void reset(int min_x, int max_x);设置容器大小
void add_span(int x, unsigned len, unsigned cover)加入一条线段
void add_cell(int x, unsigned cover)加入一个点
void add_cells(int x, unsigned len, const cover_type* covers)加入一组点
void finalize(int y)
int y();Scanline容器对应的Y坐标
Rasterizer
怎么翻译呢?光栅化?光栅制造机?嗯~~算了,还是直接叫它Rasterizer(雷死特拉倒)吧-_-!!!
Rasterizer就是把相当于矢量数据的一堆顶点和命令转换成一行行的扫描线的设备,它就象粉刷工人对照着图纸把彩漆刷到墙上一 样。可以说是AGG里最重要的类型之一,套用建翔兄的话就是:
立功了!立功了!不要给GDI任何的机会!伟大的AGG的Rasterizer类!他了继承开源社区的光荣传统!达芬奇、Linus、 唐寅,在这一刻灵魂附体!
Rasterizer是关键对象!他代表了AGG伟大的设计理念!在这一刻!他不是一个人的战斗!他不是一个人!面对着全世界人民的目 光和期待,他深知责任的重大,0.001秒种之后将会是什么样的图像?
头文件
#include <agg_rasterizer_scanline_aa.h>类型
template<class Clip = rasterizer_sl_clip_int> class rasterizer_scanline_aa;成员方法
template<class GammaF>
void gamma(const GammaF& gamma_function);设置gamma值。
GammaF为一种仿函数
AGG自带有gamma_power、gamma_none、gamma_threshold、 gamma_linear、gamma_multiply
bool rewind_scanlines();跳到第一个scanline位置,同时设置sorted为true。
这时再加入其它顶点会先清空现有顶点
bool navigate_scanline(int y);跳到y行
bool sweep_scanline(Scanline&);把当前行画入Scanline,当下移一行
void reset();清空
void move_to(int x, int y);
void line_to(int x, int y);简单的画线功能,单位为1/poly_subpixel_scale
(poly_subpixel_scale一般为256)
void move_to_d(double x, double y);
void line_to_d(double x, double y);简单的画线功能,单位为像素
void add_path(VertexSource& vs, unsigned path_id=0)
加入顶点