diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-07-09 21:02:48 +0200 |
---|---|---|
committer | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2016-02-06 17:24:15 -0500 |
commit | e17aebdeb800b1406655910c24cbccf1056e36ba (patch) | |
tree | 3855b3a49fa1777f0b3324618eb8ecf51a5574b9 /include | |
parent | 7a09b457667f2da73fad314633f7f4d297ca9171 (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
(cherry picked from commit 64baed93cfa9b74d6ef5a8913918cfbaf8499271)
Diffstat (limited to 'include')
-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 ba6e8a01714b..0b1fcede3346 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> @@ -218,106 +217,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; @@ -329,6 +228,10 @@ class GDIMetaFile; class AlphaMask; class OutputDevice; class SalBitmap; +namespace vcl +{ + class Kernel; +} struct BitmapSystemData { @@ -827,7 +730,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, |