diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-07-09 21:02:48 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2015-07-10 23:27:39 +0200 |
commit | 64baed93cfa9b74d6ef5a8913918cfbaf8499271 (patch) | |
tree | 5ca005dab162f486ca8e269d363c4afb1e6e8bfb /include/vcl | |
parent | 7aa9f045387a95d0b1a516f917fbcd23e0578902 (diff) |
vcl: move resample kernel classes out of bitmap.hxx
Since commit f31e6debfa7e330f985a0846a6ca91130d3dab20 this drags in
ridiculous amounts of boost headers, for probably negigible improvemnts
of sin(x)/x for tiny x values.
The compile time impact was not negligible, moving this nonsense to its
own header removes 1.79 GB of preprocessor input from a full build.
Change-Id: Ic41b2210eac8b130726610f2dbdbb449379225d1
Diffstat (limited to 'include/vcl')
-rw-r--r-- | include/vcl/bitmap.hxx | 107 |
1 files changed, 5 insertions, 102 deletions
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx index 6cdb3186af38..124ddbedc1cf 100644 --- a/include/vcl/bitmap.hxx +++ b/include/vcl/bitmap.hxx @@ -20,7 +20,6 @@ #ifndef INCLUDED_VCL_BITMAP_HXX #define INCLUDED_VCL_BITMAP_HXX -#include <boost/math/special_functions/sinc.hpp> #include <tools/color.hxx> #include <tools/link.hxx> #include <tools/solar.h> @@ -217,106 +216,6 @@ private: }; -// Resample kernels - -class Kernel -{ - -public: - Kernel () {} - virtual ~Kernel() {} - - virtual double GetWidth() const = 0; - virtual double Calculate( double x ) const = 0; -}; - -class Lanczos3Kernel : public Kernel -{ -public: - Lanczos3Kernel() : Kernel () {} - - virtual double GetWidth() const SAL_OVERRIDE { return 3.0; } - virtual double Calculate (double x) const SAL_OVERRIDE - { - return (-3.0 <= x && x < 3.0) ? SincFilter(x) * SincFilter( x / 3.0 ) : 0.0; - } - - static inline double SincFilter(double x) - { - if (x == 0.0) - { - return 1.0; - } - x = x * M_PI; - return boost::math::sinc_pi(x, SincPolicy()); - } - -private: - typedef boost::math::policies::policy< - boost::math::policies::promote_double<false> > SincPolicy; -}; - -class BicubicKernel : public Kernel -{ -public: - BicubicKernel() : Kernel () {} - -private: - virtual double GetWidth() const SAL_OVERRIDE { return 2.0; } - virtual double Calculate (double x) const SAL_OVERRIDE - { - if (x < 0.0) - { - x = -x; - } - - if (x <= 1.0) - { - return (1.5 * x - 2.5) * x * x + 1.0; - } - else if (x < 2.0) - { - return ((-0.5 * x + 2.5) * x - 4) * x + 2; - } - return 0.0; - } -}; - -class BilinearKernel : public Kernel -{ -public: - BilinearKernel() : Kernel () {} -private: - virtual double GetWidth() const SAL_OVERRIDE { return 1.0; } - virtual double Calculate (double x) const SAL_OVERRIDE - { - if (x < 0.0) - { - x = -x; - } - if (x < 1.0) - { - return 1.0-x; - } - return 0.0; - } -}; - -class BoxKernel : public Kernel -{ -public: - BoxKernel() : Kernel () {} - -private: - virtual double GetWidth() const SAL_OVERRIDE { return 0.5; } - virtual double Calculate (double x) const SAL_OVERRIDE - { - if (-0.5 <= x && x < 0.5) - return 1.0; - return 0.0; - } -}; - class BitmapInfoAccess; class BitmapReadAccess; class BitmapWriteAccess; @@ -328,6 +227,10 @@ class GDIMetaFile; class AlphaMask; class OutputDevice; class SalBitmap; +namespace vcl +{ + class Kernel; +} struct BitmapSystemData { @@ -826,7 +729,7 @@ public: SAL_DLLPRIVATE void ImplAdaptBitCount(Bitmap& rNew) const; SAL_DLLPRIVATE bool ImplScaleFast( const double& rScaleX, const double& rScaleY ); SAL_DLLPRIVATE bool ImplScaleInterpolate( const double& rScaleX, const double& rScaleY ); - SAL_DLLPRIVATE bool ImplScaleConvolution( const double& rScaleX, const double& rScaleY, const Kernel& aKernel); + SAL_DLLPRIVATE bool ImplScaleConvolution( const double& rScaleX, const double& rScaleY, const vcl::Kernel& rKernel); SAL_DLLPRIVATE bool ImplConvolutionPass( Bitmap& aNewBitmap, |