From: <md...@us...> - 2008-01-31 15:10:18
|
Revision: 4910 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4910&view=rev Author: mdboom Date: 2008-01-31 07:10:16 -0800 (Thu, 31 Jan 2008) Log Message: ----------- Fix image artifacts with various kinds of interpolation (Thanks Darren Dale for finding the bug). Modified Paths: -------------- trunk/matplotlib/src/_image.cpp Modified: trunk/matplotlib/src/_image.cpp =================================================================== --- trunk/matplotlib/src/_image.cpp 2008-01-31 14:21:49 UTC (rev 4909) +++ trunk/matplotlib/src/_image.cpp 2008-01-31 15:10:16 UTC (rev 4910) @@ -409,43 +409,17 @@ agg::render_scanlines(ras, sl, ri); } break; - case BILINEAR: - case BICUBIC: - case SPLINE16: - case SPLINE36: - case HANNING: - case HAMMING: - case HERMITE: - case KAISER: - case QUADRIC: - case CATROM: - case GAUSSIAN: - case BESSEL: - case MITCHELL: - case SINC: - case LANCZOS: - case BLACKMAN: - { - agg::image_filter_lut filter; - switch(interpolation) - { - case BILINEAR: filter.calculate(agg::image_filter_bilinear(), norm); break; - case BICUBIC: filter.calculate(agg::image_filter_bicubic(), norm); break; - case SPLINE16: filter.calculate(agg::image_filter_spline16(), norm); break; - case SPLINE36: filter.calculate(agg::image_filter_spline36(), norm); break; - case HANNING: filter.calculate(agg::image_filter_hanning(), norm); break; - case HAMMING: filter.calculate(agg::image_filter_hamming(), norm); break; - case HERMITE: filter.calculate(agg::image_filter_hermite(), norm); break; - case KAISER: filter.calculate(agg::image_filter_kaiser(), norm); break; - case QUADRIC: filter.calculate(agg::image_filter_quadric(), norm); break; - case CATROM: filter.calculate(agg::image_filter_catrom(), norm); break; - case GAUSSIAN: filter.calculate(agg::image_filter_gaussian(), norm); break; - case BESSEL: filter.calculate(agg::image_filter_bessel(), norm); break; - case MITCHELL: filter.calculate(agg::image_filter_mitchell(), norm); break; - case SINC: filter.calculate(agg::image_filter_sinc(radius), norm); break; - case LANCZOS: filter.calculate(agg::image_filter_lanczos(radius), norm); break; - case BLACKMAN: filter.calculate(agg::image_filter_blackman(radius), norm); break; - } + + case HANNING: + case HAMMING: + case HERMITE: + { + agg::image_filter_lut filter; + switch (interpolation) { + case HANNING: filter.calculate(agg::image_filter_hanning(), norm); break; + case HAMMING: filter.calculate(agg::image_filter_hamming(), norm); break; + case HERMITE: filter.calculate(agg::image_filter_hermite(), norm); break; + } typedef agg::span_image_filter_rgba_2x2<img_accessor_type, interpolator_type> span_gen_type; typedef agg::renderer_scanline_aa<renderer_base, span_alloc_type, span_gen_type> renderer_type; span_gen_type sg(ia, interpolator, filter); @@ -453,6 +427,44 @@ agg::render_scanlines(ras, sl, ri); } break; + case BILINEAR: + case BICUBIC: + case SPLINE16: + case SPLINE36: + case KAISER: + case QUADRIC: + case CATROM: + case GAUSSIAN: + case BESSEL: + case MITCHELL: + case SINC: + case LANCZOS: + case BLACKMAN: + { + agg::image_filter_lut filter; + switch(interpolation) + { + case BILINEAR: filter.calculate(agg::image_filter_bilinear(), norm); break; + case BICUBIC: filter.calculate(agg::image_filter_bicubic(), norm); break; + case SPLINE16: filter.calculate(agg::image_filter_spline16(), norm); break; + case SPLINE36: filter.calculate(agg::image_filter_spline36(), norm); break; + case KAISER: filter.calculate(agg::image_filter_kaiser(), norm); break; + case QUADRIC: filter.calculate(agg::image_filter_quadric(), norm); break; + case CATROM: filter.calculate(agg::image_filter_catrom(), norm); break; + case GAUSSIAN: filter.calculate(agg::image_filter_gaussian(), norm); break; + case BESSEL: filter.calculate(agg::image_filter_bessel(), norm); break; + case MITCHELL: filter.calculate(agg::image_filter_mitchell(), norm); break; + case SINC: filter.calculate(agg::image_filter_sinc(radius), norm); break; + case LANCZOS: filter.calculate(agg::image_filter_lanczos(radius), norm); break; + case BLACKMAN: filter.calculate(agg::image_filter_blackman(radius), norm); break; + } + typedef agg::span_image_filter_rgba<img_accessor_type, interpolator_type> span_gen_type; + typedef agg::renderer_scanline_aa<renderer_base, span_alloc_type, span_gen_type> renderer_type; + span_gen_type sg(ia, interpolator, filter); + renderer_type ri(rb, sa, sg); + agg::render_scanlines(ras, sl, ri); + } + break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |