+ use custom span_image_filter preserve alpha

This commit is contained in:
Artem Pavlenko 2012-05-14 17:32:12 +01:00
parent 983db006e9
commit e08339aee9
2 changed files with 9 additions and 10 deletions

View File

@ -35,7 +35,7 @@ extern "C"
#include <mapnik/palette.hpp>
#include <mapnik/map.hpp>
#include <mapnik/util/conversions.hpp>
#include <mapnik/span_image_filter.hpp>
// jpeg
#if defined(HAVE_JPEG)
#include <mapnik/jpeg_io.hpp>
@ -690,7 +690,8 @@ template <typename Image>
void scale_image_agg (Image& target,const Image& source, scaling_method_e scaling_method, double scale_factor, double x_off_f, double y_off_f, double filter_radius, double ratio)
{
typedef agg::pixfmt_rgba32 pixfmt;
typedef agg::renderer_base<pixfmt> renderer_base;
typedef agg::pixfmt_rgba32_pre pixfmt_pre;
typedef agg::renderer_base<pixfmt_pre> renderer_base;
// define some stuff we'll use soon
agg::rasterizer_scanline_aa<> ras;
@ -701,13 +702,12 @@ void scale_image_agg (Image& target,const Image& source, scaling_method_e scalin
// initialize source AGG buffer
agg::rendering_buffer rbuf_src((unsigned char*)source.getBytes(), source.width(), source.height(), source.width() * 4);
pixfmt pixf_src(rbuf_src);
typedef agg::image_accessor_clone<pixfmt> img_src_type;
img_src_type img_src(pixf_src);
// initialise destination AGG buffer (with transparency)
agg::rendering_buffer rbuf_dst((unsigned char*)target.getBytes(), target.width(), target.height(), target.width() * 4);
pixfmt pixf_dst(rbuf_dst);
pixfmt_pre pixf_dst(rbuf_dst);
renderer_base rb_dst(pixf_dst);
rb_dst.clear(agg::rgba(0, 0, 0, 0));
@ -770,7 +770,7 @@ void scale_image_agg (Image& target,const Image& source, scaling_method_e scalin
case SCALING_BLACKMAN:
filter.calculate(agg::image_filter_blackman(filter_radius), true); break;
}
typedef agg::span_image_resample_rgba_affine<img_src_type> span_gen_type;
typedef mapnik::span_image_resample_rgba_affine<img_src_type> span_gen_type;
span_gen_type sg(img_src, interpolator, filter);
agg::render_scanlines_aa(ras, sl, rb_dst, sa, sg);
}

View File

@ -27,6 +27,7 @@
#include <mapnik/image_util.hpp>
#include <mapnik/box2d.hpp>
#include <mapnik/ctrans.hpp>
#include <mapnik/span_image_filter.hpp>
// agg
#include "agg_image_filters.h"
@ -191,11 +192,9 @@ void reproject_raster(raster &target, raster const& source,
span_gen_type sg(ia, interpolator);
agg::render_scanlines_aa(rasterizer, scanline, rb_pre,
sa, sg);
} else {
typedef agg::span_image_filter_rgba_2x2
<img_accessor_type, interpolator_type>
span_gen_type;
} else {
typedef mapnik::span_image_resample_rgba_affine
<img_accessor_type> span_gen_type;
span_gen_type sg(ia, interpolator, filter);
agg::render_scanlines_aa(rasterizer, scanline, rb_pre,
sa, sg);