Revision: 4910
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4910&view=rev
Author: mdboom
Date: 2008年01月31日 07:10:16 -0800 (2008年1月31日)
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.