From 82e1b3728122d92a965a9263ba62f5a23fd2f8cb Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 27 Sep 2013 16:11:23 -0700 Subject: [PATCH] allow single color colorize-alpha --- CHANGELOG.md | 2 + include/mapnik/image_filter.hpp | 25 ++ src/image_filter_grammar.cpp | 4 +- ...ize-alpha3-512-512-1.0-grid-reference.json | 283 ++++++++++++++++++ ...orize-alpha3-512-512-1.0-agg-reference.png | Bin 0 -> 21093 bytes ...orize-alpha3-512-512-2.0-agg-reference.png | Bin 0 -> 25619 bytes tests/visual_tests/styles/colorize-alpha4.xml | 49 +++ 7 files changed, 361 insertions(+), 2 deletions(-) create mode 100644 tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json create mode 100644 tests/visual_tests/images/colorize-alpha3-512-512-1.0-agg-reference.png create mode 100644 tests/visual_tests/images/colorize-alpha3-512-512-2.0-agg-reference.png create mode 100644 tests/visual_tests/styles/colorize-alpha4.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index bb6c9f7f1..f05070ea9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ Released ... Summary: TODO +- Added single color argument support to `colorize-alpha` to allow colorizing alpha with one color. + - Added `color-to-alpha` `image-filter` to allow for applying alpha in proportion to color similiarity (#2023) - Added Async support to PostGIS plugin - https://github.com/mapnik/mapnik/wiki/PostGIS-Async diff --git a/include/mapnik/image_filter.hpp b/include/mapnik/image_filter.hpp index 3749a47db..176ccdd44 100644 --- a/include/mapnik/image_filter.hpp +++ b/include/mapnik/image_filter.hpp @@ -482,6 +482,31 @@ void apply_filter(Src & src, colorize_alpha const& op) { using namespace boost::gil; std::size_t size = op.size(); + if (op.size() == 1) + { + // no interpolation if only one stop + mapnik::filter::color_stop const& stop = op[0]; + mapnik::color const& c = stop.color; + rgba8_view_t src_view = rgba8_view(src); + for (int y=0; y 0) + { + r = (c.red() * a + 255) >> 8; + g = (c.green() * a + 255) >> 8; + b = (c.blue() * a + 255) >> 8; + } + } + } + } + else if (size > 1) { // interpolate multiple stops diff --git a/src/image_filter_grammar.cpp b/src/image_filter_grammar.cpp index 033dc96d6..f54e184be 100644 --- a/src/image_filter_grammar.cpp +++ b/src/image_filter_grammar.cpp @@ -115,8 +115,8 @@ image_filter_grammar::image_filter_grammar() >> lit('(') >> (css_color_[at_c<0>(_b) = _1, at_c<1>(_b) = 0] >> -color_stop_offset(_b)) [push_back(_a,_b)] - >> +(lit(',') >> css_color_[at_c<0>(_b) =_1,at_c<1>(_b) = 0] - >> -color_stop_offset(_b))[push_back(_a,_b)] + >> -(+(lit(',') >> css_color_[at_c<0>(_b) =_1,at_c<1>(_b) = 0] + >> -color_stop_offset(_b))[push_back(_a,_b)]) >> lit(')') [push_back(_r1,_a)] ; diff --git a/tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json b/tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json new file mode 100644 index 000000000..10e41a5bb --- /dev/null +++ b/tests/visual_tests/grids/colorize-alpha3-512-512-1.0-grid-reference.json @@ -0,0 +1,283 @@ +{ + "keys": [ + "", + "66", + "28", + "119", + "135", + "168", + "78", + "151", + "53", + "58", + "51", + "44", + "97", + "99", + "20", + "75", + "118", + "42", + "128", + "84", + "31", + "56", + "98", + "41", + "166", + "108", + "29", + "80", + "10", + "72", + "134", + "19", + "147", + "169", + "83", + "131", + "50", + "3", + "104", + "65", + "162", + "59", + "158", + "86", + "130", + "76", + "157", + "100", + "46", + "161", + "39", + "153", + "77", + "1", + "123", + "88", + "94", + "74", + "103", + "48", + "138", + "90", + "120", + "110", + "25", + "106", + "18", + "105", + "4", + "122", + "16", + "163", + "38", + "137", + "115", + "154", + "139", + "91", + "171", + "71", + "45", + "174", + "156", + "67", + "69", + "141", + "49", + "126", + "144", + "117", + "15", + "116", + "52", + "87", + "36", + "170", + "160", + "61", + "60", + "155", + "14", + "33", + "140", + "145", + "146", + "124", + "68", + "143", + "32", + "27", + "95", + "148", + "93", + "34", + "73", + "112", + "23", + "64", + "35", + "165", + "85", + "47", + "125", + "57", + "164", + "127", + "2", + "176", + "159", + "142", + "22", + "111", + "109", + "9", + "102", + "172", + "113", + "177", + "54", + "30", + "132", + "26", + "5", + "175", + "167", + "121", + "55", + "7" + ], + "data": {}, + "grid": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " !!!!! ", + " ##########!!!!!!!!!!!!!!!!!!!! $$ %%% %%% ", + " # ###########!!!!!!!!!!!!!!!!!!!! $$ $ %% ", + " ##### ######## !!!!!!!!!!!!!!! %%% %%%%%%%%%% %%%%% ", + " ####### ### ###### !!!!!!!!!!!! % % %%%%%%%%%%%%%%%%%% %%%% ", + " &&&&&&&&# ###### ######### ####### !!!!!!!!!!! $$$$%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%", + "%%%% &&&&&&&&###################### ##### !!!!!!!! ' $((())%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", + " %& &&&&&&&###################### ### !!!! ''' $$((()))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", + " &&&&&&&&&################# ### !! $$$(( ))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% ", + " &&& &&############## ###### * $$(( +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% ", + " && &################# ####### ** ,,( -./%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% ", + " ############################ 0 ** 1223333//%%%%%%%%%%%444444%%%%%%%%%%%%%%%55%%%%%% % ", + " ######################## # * 667228839999999%%%444444444444%%%:%::%%%%%%555%%%% % ", + " &&&&&&&&&&&&&&#####&## ## 6666;<=>>???999%%%%44444444444445:::::::::::55555%% % ", + " &&&&&&&&&&&&&&&##&&&&# 666<< @AA?? 9 %%% 44BB444444455555::::::5555555%% C ", + " &&&&&&&&&&&&&&&&&&&& DEEEE <<< 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 literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-2.0-agg-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-agg-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..f60e8d16a92c6e32b0d090338f7015d406b78724 GIT binary patch literal 25619 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 + + + + + + + + + countries + + ../../data/shp/ne_110m_admin_0_countries.shp + shape + + + + + style + + + x,y + -170,20 + -122,48 + -122.2,48.2 + -122.2,48.2 + -122.3,48.3 + -122.1,48.4 + -122.1,48.2 + -115,36 + 90,30 + 0,0 + 1,1 + 10,10 + -10,-10 + -20,-20 + + csv + + + + \ No newline at end of file