void render_pattern<image_rgba8>(rasterizer & ras, marker_svg const& marker, agg::trans_affine const& tr, double opacity, image_rgba8 & image) { using pixfmt = agg::pixfmt_rgba32_pre; using renderer_base = agg::renderer_base<pixfmt>; using renderer_solid = agg::renderer_scanline_aa_solid<renderer_base>; agg::scanline_u8 sl; mapnik::box2d<double> const& bbox = marker.bounding_box() * tr; mapnik::coord<double,2> c = bbox.center(); agg::trans_affine mtx = agg::trans_affine_translation(-c.x,-c.y); mtx.translate(0.5 * bbox.width(), 0.5 * bbox.height()); mtx = tr * mtx; agg::rendering_buffer buf(image.bytes(), image.width(), image.height(), image.row_size()); pixfmt pixf(buf); renderer_base renb(pixf); mapnik::svg::vertex_stl_adapter<mapnik::svg::svg_path_storage> stl_storage(marker.get_data()->source()); mapnik::svg::svg_path_adapter svg_path(stl_storage); mapnik::svg::svg_renderer_agg<mapnik::svg::svg_path_adapter, agg::pod_bvector<mapnik::svg::path_attributes>, renderer_solid, pixfmt > svg_renderer(svg_path, marker.get_data()->attributes()); svg_renderer.render(ras, sl, renb, mtx, opacity, bbox); }
inline int import_image(image_rgba8 const& im, WebPPicture & pic, bool alpha) { std::size_t stride = sizeof(image_rgba8::pixel_type) * im.width(); if (alpha) { return WebPPictureImportRGBA(&pic, im.bytes(), static_cast<int>(stride)); } else { #if (WEBP_ENCODER_ABI_VERSION >> 8) >= 1 return WebPPictureImportRGBX(&pic, im.bytes(), static_cast<int>(stride)); #else return WebPPictureImportRGBA(&pic, im.bytes(), static_cast<int>(stride)); #endif } }