Added the ability for filter_image to throw properly with bad input and added the ability for a new image to be returned
This commit is contained in:
parent
75522c0cc5
commit
0b6b11b9cf
3 changed files with 53 additions and 8 deletions
|
@ -18,6 +18,7 @@ Released: YYYY XX, 2015
|
|||
- Added 3 new image-filters to simulate types of colorblindness (`color-blind-protanope`,`color-blind-deuteranope`,`color-blind-tritanope`)
|
||||
- Fix so that null text boxes have no bounding boxes when attempting placement ( 162f82cba5b0fb984c425586c6a4b354917abc47 )
|
||||
- Patch to add legacy method for setting JPEG quality in images ( #3024 )
|
||||
- Added `filter_image` method which can modify an image in place or return a new image that is filtered.
|
||||
|
||||
## 3.0.2
|
||||
|
||||
|
|
|
@ -951,7 +951,10 @@ template<typename Src>
|
|||
void filter_image(Src & src, std::string const& filter)
|
||||
{
|
||||
std::vector<filter_type> filter_vector;
|
||||
parse_image_filters(filter, filter_vector);
|
||||
if(!parse_image_filters(filter, filter_vector))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse filter argument in filter_image: '" + filter + "'");
|
||||
}
|
||||
filter_visitor<Src> visitor(src);
|
||||
for (filter_type const& filter_tag : filter_vector)
|
||||
{
|
||||
|
@ -959,6 +962,23 @@ void filter_image(Src & src, std::string const& filter)
|
|||
}
|
||||
}
|
||||
|
||||
template<typename Src>
|
||||
Src filter_image(Src const& src, std::string const& filter)
|
||||
{
|
||||
std::vector<filter_type> filter_vector;
|
||||
if(!parse_image_filters(filter, filter_vector))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse filter argument in filter_image: '" + filter + "'");
|
||||
}
|
||||
Src new_src(src);
|
||||
filter_visitor<Src> visitor(new_src);
|
||||
for (filter_type const& filter_tag : filter_vector)
|
||||
{
|
||||
util::apply_visitor(visitor, filter_tag);
|
||||
}
|
||||
return new_src;
|
||||
}
|
||||
|
||||
} // End Namespace Filter
|
||||
|
||||
} // End Namespace Mapnik
|
||||
|
|
|
@ -15,14 +15,17 @@ SECTION("test bad filter input") {
|
|||
mapnik::fill(im,mapnik::color("blue"));
|
||||
mapnik::set_pixel(im, 1, 1, mapnik::color("red"));
|
||||
|
||||
// This will not throw as it is just ignored during parsing
|
||||
// as if no filter is applied
|
||||
mapnik::filter::filter_image(im, "foo,asdfasdf()");
|
||||
mapnik::filter::filter_image(im, "colorize-alpha(");
|
||||
mapnik::filter::filter_image(im, "color-to-alpha(blue");
|
||||
mapnik::filter::filter_image(im, "color-to-alpha(,blue)");
|
||||
mapnik::filter::filter_image(im, "colorize-alpha()");
|
||||
REQUIRE_THROWS( mapnik::filter::filter_image(im, "foo,asdfasdf()"); );
|
||||
REQUIRE_THROWS( mapnik::filter::filter_image(im, "colorize-alpha("); );
|
||||
REQUIRE_THROWS( mapnik::filter::filter_image(im, "color-to-alpha(blue"); );
|
||||
REQUIRE_THROWS( mapnik::filter::filter_image(im, "color-to-alpha(,blue)"); );
|
||||
REQUIRE_THROWS( mapnik::filter::filter_image(im, "colorize-alpha()"); );
|
||||
|
||||
REQUIRE_THROWS(
|
||||
mapnik::image_rgba8 const& im2 = im;
|
||||
mapnik::image_rgba8 new_im = mapnik::filter::filter_image(im2, "foo");
|
||||
);
|
||||
|
||||
CHECK(im(0,0) == 0xffff0000);
|
||||
CHECK(im(0,1) == 0xffff0000);
|
||||
CHECK(im(0,2) == 0xffff0000);
|
||||
|
@ -55,6 +58,27 @@ SECTION("test blur") {
|
|||
|
||||
} // END SECTION
|
||||
|
||||
SECTION("test blur constant") {
|
||||
|
||||
mapnik::image_rgba8 im_orig(3,3);
|
||||
mapnik::fill(im_orig,mapnik::color("blue"));
|
||||
mapnik::set_pixel(im_orig, 1, 1, mapnik::color("red"));
|
||||
|
||||
mapnik::image_rgba8 const& im_new = im_orig;
|
||||
mapnik::image_rgba8 im = mapnik::filter::filter_image(im_new, "blur");
|
||||
|
||||
CHECK(im(0,0) == 0xffc60038);
|
||||
CHECK(im(0,1) == 0xffe2001c);
|
||||
CHECK(im(0,2) == 0xffc60038);
|
||||
CHECK(im(1,0) == 0xffc60038);
|
||||
CHECK(im(1,1) == 0xffe2001c);
|
||||
CHECK(im(1,2) == 0xffc60038);
|
||||
CHECK(im(2,0) == 0xffc60038);
|
||||
CHECK(im(2,1) == 0xffe2001c);
|
||||
CHECK(im(2,2) == 0xffc60038);
|
||||
|
||||
} // END SECTION
|
||||
|
||||
SECTION("test gray") {
|
||||
|
||||
mapnik::image_rgba8 im(3,3);
|
||||
|
|
Loading…
Add table
Reference in a new issue