Merge remote-tracking branch 'origin/master'

Conflicts:
	deps/agg/include/agg_pixfmt_rgba.h
	include/mapnik/image_compositing.hpp
	src/cairo_renderer.cpp
	src/image_compositing.cpp
This commit is contained in:
Artem Pavlenko 2012-06-18 14:36:15 -04:00
commit 9b61c0effe
5 changed files with 144 additions and 9 deletions

View file

@ -4,11 +4,13 @@ A simple log of core changes affecting Mapnik usage.
Developers: Please commit along with changes. Developers: Please commit along with changes.
For a complete change history, see the SVN log. For a complete change history, see the git log.
## Mapnik 2.1.0 ## Mapnik 2.1.0
Not yet released
- PostGIS: Added 'simplify_geometries' option - will trigger ST_Simplify on geometries before returning to Mapnik (#1179) - PostGIS: Added 'simplify_geometries' option - will trigger ST_Simplify on geometries before returning to Mapnik (#1179)
- Improved error feedback for invalid values passed to map.query_point - Improved error feedback for invalid values passed to map.query_point
@ -48,7 +50,9 @@ For a complete change history, see the SVN log.
## Mapnik 2.0.1 ## Mapnik 2.0.1
(Packaged from 5cd3cb2efdaf7e9990a57e8e00b652a81aaa39ae) Released April 10, 2012
(Packaged from 57347e9106)
- Support for PostGIS 2.0 (#956,#1083) - Support for PostGIS 2.0 (#956,#1083)
@ -83,6 +87,10 @@ For a complete change history, see the SVN log.
## Mapnik 2.0.0 ## Mapnik 2.0.0
Released September 26, 2011
(Packaged from 5b4c20eab3)
- Add minimum-path-length property to text_symbolizer to allow labels to be placed only on lines of a certain length (#865) - Add minimum-path-length property to text_symbolizer to allow labels to be placed only on lines of a certain length (#865)
- Add support for png quantization using fixed palettes (#843) - Add support for png quantization using fixed palettes (#843)
@ -170,7 +178,11 @@ For a complete change history, see the SVN log.
- Implement MarkersSymbolizer in Cairo render and improve the markers placement finder. (#553) - Implement MarkersSymbolizer in Cairo render and improve the markers placement finder. (#553)
# Mapnik 0.7.2 Release # Mapnik 0.7.2
Released Oct 18, 2011
(Packaged from bc5cabeb6a)
- Added forward compatibility for Mapnik 2.0 XML syntax (https://trac.mapnik.org/wiki/Mapnik2/Changes) - Added forward compatibility for Mapnik 2.0 XML syntax (https://trac.mapnik.org/wiki/Mapnik2/Changes)
@ -213,9 +225,53 @@ For a complete change history, see the SVN log.
- Fixed reading of label_position_tolerance on text_symbolizer and height for building_symbolizer - Fixed reading of label_position_tolerance on text_symbolizer and height for building_symbolizer
# Mapnik 0.7.0 Release # Mapnik 0.7.1
(Packaged from r1574) Released March 23, 2010
(Packaged from r1745/db89f1ca75)
- Rasters: Various fixes and improvements to 8bit png output ([#522](https://github.com/mapnik/mapnik/issues/522),[#475](https://github.com/mapnik/mapnik/issues/475))
- XML: Save map buffer_size when serializing map.
- SCons: Added new build options 'PRIORITIZE_LINKING' and 'LINK_PRIORITY'. The first is a boolean (default True)
of whether to use the new sorting implementation that gives explcit preference to custom or local paths
during compile and linking that will affect builds when duplicate libraries and include directories are on the
system. LINK_PRIORITY defaults to prioritizing internal sources of the mapnik source folder, then local/user
installed libraries over system libraries, but the option can be customized. Sorting not only ensures that
compiling and linking will more likely match the desired libraries but also gives more likelyhood to avoid
the scenario where libraries are linked that don't match the includes libmapnik compiled against.
- XML: Fixed behavior of PolygonPatternSymbolizer and LinePatternSymbolizer whereby width, height,
and type of images is actually allowed to be optionally ommitted ([#508](https://github.com/mapnik/mapnik/issues/508)). This was added in r1543 but
only worked correctly for PointSymbolizer and ShieldSymbolizer.
- Fixed reading of PostGIS data on Big Endian systems ([#515](https://github.com/mapnik/mapnik/issues/515))
- PostGIS: Added better support for alterative schemas ([#500](https://github.com/mapnik/mapnik/issues/500))
- AGG Renderer - Enforced default gamma function on all symbolizers to ensure proper antialiasing
even when gamma is modified on the PolygonSymbolizer. ([#512](https://github.com/mapnik/mapnik/issues/512))
- PNG: fixed png256 for large images and some improvements to reduce color corruptions ([#522](https://github.com/mapnik/mapnik/issues/522))
- PNG: Added new quantization method for indexed png format using hextree with full support for alpha
channel. Also new method has some optimizations for color gradients common when using elevation based
rasters. By default old method using octree is used. (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477))
- PNG: Added initial support for passing options to png writter like number of colors, transparency
support, quantization method and possibly other in future using type parameter. For example
"png8:c=128:t=1:m=h" limits palette to 128 colors, uses only binary transparency (0 - none,
1 - binary, 2 - full), and new method of quantization using hextree (h - hextree, o - octree).
Existing type "png256" can be also written using "png8:c=256:m=o:t=2" (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477))
# Mapnik 0.7.0
Released January, 19 2010
(Packaged from r1574/a0da946be9)
- Core: Fixed linking to external libagg (r1297,r1299) - Core: Fixed linking to external libagg (r1297,r1299)
@ -353,10 +409,11 @@ For a complete change history, see the SVN log.
- Fonts: Added unifont to auto-installed fonts, which is used by the OSM styles as a fallback font (r1328) - Fonts: Added unifont to auto-installed fonts, which is used by the OSM styles as a fallback font (r1328)
# Mapnik 0.6.1
# Mapnik 0.6.1 Release Released July 14, 2009
(Packaged from r1247) (Packaged from r1247/353ff576c7)
- Plugins: expose list of registered plugins as a 'plugin_names()' method of DatasourceCache (r1180) - Plugins: expose list of registered plugins as a 'plugin_names()' method of DatasourceCache (r1180)
@ -437,10 +494,11 @@ For a complete change history, see the SVN log.
- Plugins: Fixed segfault in OGR Plugin with empty geometries (r1074) (#292) - Plugins: Fixed segfault in OGR Plugin with empty geometries (r1074) (#292)
# Mapnik 0.6.0
# Mapnik 0.6.0 Release Released April 1, 2009
(Packaged from r1066) (Packaged from r1066/c88e03436f)
- Python: Added support for aspect_fix_mode (r1013) - Python: Added support for aspect_fix_mode (r1013)
@ -530,3 +588,27 @@ For a complete change history, see the SVN log.
- Plugins: Use memory mapped files for reading shape file (r628) - Plugins: Use memory mapped files for reading shape file (r628)
- Core: Use streams to write images (i/o refactor) (r628) (#15) - Core: Use streams to write images (i/o refactor) (r628) (#15)
# Mapnik 0.5.1
Released April 15, 2008
(Packaged from c29cb7386d)
# Mapnik 0.5.0
Released April 15, 2008
(Packaged from 0464a3563c)
# Mapnik 0.4.0
Released February 26, 2007
(Packaged from 8d73e3a8dc)
# Mapnik 0.3.0
Released May 22, 2006
(Packaged from 3ae046ebe2)

View file

@ -1433,6 +1433,54 @@ namespace agg
} }
}; };
// color spin
template <typename ColorT, typename Order>
struct comp_op_rgba_color_spin
{
typedef ColorT color_type;
typedef Order order_type;
typedef typename color_type::value_type value_type;
typedef typename color_type::calc_type calc_type;
typedef typename color_type::long_type long_type;
enum base_scale_e
{
base_shift = color_type::base_shift,
base_mask = color_type::base_mask
};
static AGG_INLINE void blend_pix(value_type* p,
// source rgb
unsigned sr, unsigned sg, unsigned sb,
// source alpha and opacity
unsigned sa, unsigned cover) {
if (cover < 255) {
sa = (sa * cover + 255) >> 8;
}
p[Order::R] = (value_type)(((0 + base_mask) >> base_shift));
p[Order::G] = (value_type)(((0 + base_mask) >> base_shift));
p[Order::B] = (value_type)(((0 + base_mask) >> base_shift));
p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
// http://en.wikipedia.org/wiki/File:HSV-RGB-comparison.svg
if (p[Order::A] < 64) {
p[Order::G] = ((p[Order::A] - 64) * 4);
p[Order::B] = 255;
}
if (p[Order::A] >= 64 && p[Order::A] < 128) {
p[Order::G] = 255;
p[Order::B] = 255 - ((p[Order::A] - 64) * 4);
}
if (p[Order::A] >= 128 && p[Order::A] < 192) {
p[Order::R] = ((p[Order::A] - 128) * 4);
p[Order::G] = 255;
}
if (p[Order::A] >= 192) {
p[Order::R] = 255;
p[Order::G] = 255 - ((p[Order::A] - 192) * 4);
}
}
};
// grain extract (GIMP) // grain extract (GIMP)
// E = I - M + 128 // E = I - M + 128
@ -1714,6 +1762,7 @@ namespace agg
comp_op_rgba_saturation<ColorT,Order>::blend_pix, comp_op_rgba_saturation<ColorT,Order>::blend_pix,
comp_op_rgba_color<ColorT,Order>::blend_pix, comp_op_rgba_color<ColorT,Order>::blend_pix,
comp_op_rgba_value<ColorT,Order>::blend_pix, comp_op_rgba_value<ColorT,Order>::blend_pix,
comp_op_rgba_color_spin<ColorT,Order>::blend_pix,
0 0
}; };
@ -1755,6 +1804,7 @@ namespace agg
comp_op_saturation, //----comp_op_saturation comp_op_saturation, //----comp_op_saturation
comp_op_color, //----comp_op_color comp_op_color, //----comp_op_color
comp_op_value, //----comp_op_value comp_op_value, //----comp_op_value
comp_op_color_spin, //----comp_op_color_spin
end_of_comp_op_e end_of_comp_op_e
}; };

View file

@ -75,6 +75,7 @@ enum composite_mode_e
saturation, saturation,
_color, _color,
_value _value
color_spin
}; };
MAPNIK_DECL boost::optional<composite_mode_e> comp_op_from_string(std::string const& name); MAPNIK_DECL boost::optional<composite_mode_e> comp_op_from_string(std::string const& name);

View file

@ -389,6 +389,7 @@ public:
case saturation: case saturation:
case _color: case _color:
case _value: case _value:
case color_spin:
break; break;
} }
} }

View file

@ -74,6 +74,7 @@ static const comp_op_lookup_type comp_lookup = boost::assign::list_of<comp_op_lo
(saturation,"saturation") (saturation,"saturation")
(_color,"color") (_color,"color")
(_value,"value") (_value,"value")
(color_spin,"color-spin")
; ;
boost::optional<composite_mode_e> comp_op_from_string(std::string const& name) boost::optional<composite_mode_e> comp_op_from_string(std::string const& name)