组合类线段生成器
头文件
- #include <agg_span_converter.h>
类型
- template<class SpanGenerator, class SpanConverter>
- class agg::span_converter;
span_converter的作用是组合两种生成器,比如先由图案类线段生成器产生图案,然后由色彩类线段生成器产生半透明色叠加在图案上。
下面的演示代码演示了怎样组合span_image_filter_rgb_bilinear_clip和span_gradient_alpha两种生成器
演示代码,同样基于这个代码,加入下面的头文件
- #include "agg_span_allocator.h"
- #include "agg_span_gradient_alpha.h"
- #include "agg_span_converter.h"
- #include "span_image_filter_rgb_bilinear_clip.h"
在on_draw()方法的最后加上下面这些代码
- agg::pixel_map pm_img;
- if(pm_img.load_from_bmp("d:\\spheres.bmp"))
- {
-
- agg::rendering_buffer rbuf_img(
- pm_img.buf(),
- pm_img.width(), pm_img.height(),
- -pm_img.stride());
- agg::pixfmt_bgr24 pixf_img(rbuf_img);
-
- typedef agg::span_allocator<agg::rgba8> span_allocator_type;
- span_allocator_type span_alloc;
-
- typedef agg::span_interpolator_linear<> interpolator_type;
- agg::trans_affine img_mtx;
- interpolator_type ip_img(img_mtx);
-
- agg::trans_affine alpha_mtx;
- interpolator_type ip_alpha(alpha_mtx);
-
-
- typedef agg::gradient_x gradientF_type;
- gradientF_type grF;
-
- typedef std::vector<agg::int8u> alphaF_type;
- alphaF_type alphaF(256);
- for(int i=0; i<256; i++) alphaF[i] = i;
-
-
- typedef agg::span_gradient_alpha<agg::rgba8,
- interpolator_type,
- gradientF_type,
- alphaF_type> alpha_span_gen_type;
- alpha_span_gen_type alpha_span_gen(ip_alpha,grF,alphaF,0,150);
-
-
- typedef agg::span_image_filter_rgb_bilinear_clip<agg::pixfmt_bgr24,
- interpolator_type > pic_span_gen_type;
- pic_span_gen_type pic_span_gen(pixf_img, agg::rgba(0,1,0), ip_img);
-
-
- typedef agg::span_converter<pic_span_gen_type, alpha_span_gen_type> span_gen_type;
- span_gen_type span_gen(pic_span_gen,alpha_span_gen);
-
-
- agg::renderer_scanline_aa<
- renderer_base_type,
- span_allocator_type,
- span_gen_type
- > my_renderer(renb, span_alloc, span_gen);
-
- img_mtx.scale(0.5);
- img_mtx.translate(40,40);
- img_mtx.invert();
-
-
- ras.add_path(ccell);
- agg::render_scanlines(ras,sl,my_renderer);
- }
显示效果
<<待续>>