[Libreoffice-commits] core.git: include/vcl vcl/source
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 17 12:27:02 UTC 2019
include/vcl/bitmap.hxx | 13 +++++++------
vcl/source/gdi/bitmap3.cxx | 18 +++++++++++-------
2 files changed, 18 insertions(+), 13 deletions(-)
New commits:
commit 9fd53538f9ecd2c6a935be1958b9f8dafeab8740
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Tue Jul 2 17:11:57 2019 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Wed Jul 17 14:25:57 2019 +0200
vcl: make it possible to select specific scaling algorithm
Default, Fast, BestQuality scaling flags are used for selecting
the best sclaing algorithm for a specific task, but not all
specialized sclaing algorithms have its own flag (Super,
NearestNeighbor) and are just selectable using one of the above.
This adds the missing flags so it's possible to select a specific
algorithm.
Change-Id: Ied41f27a21a4fcc799537396f9077a9c77cc1c60
Reviewed-on: https://gerrit.libreoffice.org/75759
Reviewed-by: Chris Sherlock <chris.sherlock79 at gmail.com>
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index dcc862ed7779..59c6c9ac28d6 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -39,26 +39,27 @@ enum class BmpMirrorFlags
Horizontal = 0x01,
Vertical = 0x02,
};
+
namespace o3tl
{
template<> struct typed_flags<BmpMirrorFlags> : is_typed_flags<BmpMirrorFlags, 0x03> {};
}
-
enum class BmpScaleFlag
{
// Try to preferably use these.
- Default = 1,
+ Default,
Fast,
BestQuality,
-// Specific algorithms, use only if you really need to.
- Interpolate,
+// Specific algorithms, use only if you really need to (mainly used for tests)
+ NearestNeighbor,
+ Interpolate, // fast, integer bilinear
Lanczos,
BiCubic,
- BiLinear
+ BiLinear,
+ Super // bilinear interpolation when supersampling and averaging when subsampling under certain scale
};
-
#define BMP_COL_TRANS Color( 252, 3, 251 )
enum class BmpConversion
diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx
index 71a3bc468876..a3b22ffa3f5c 100644
--- a/vcl/source/gdi/bitmap3.cxx
+++ b/vcl/source/gdi/bitmap3.cxx
@@ -776,7 +776,15 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag n
switch(nScaleFlag)
{
+ case BmpScaleFlag::Default:
+ if (GetSizePixel().Width() < 2 || GetSizePixel().Height() < 2)
+ bRetval = BitmapFilter::Filter(aBmpEx, BitmapFastScaleFilter(rScaleX, rScaleY));
+ else
+ bRetval = BitmapFilter::Filter(aBmpEx, BitmapScaleSuperFilter(rScaleX, rScaleY));
+ break;
+
case BmpScaleFlag::Fast:
+ case BmpScaleFlag::NearestNeighbor:
bRetval = BitmapFilter::Filter(aBmpEx, BitmapFastScaleFilter(rScaleX, rScaleY));
break;
@@ -784,15 +792,11 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag n
bRetval = BitmapFilter::Filter(aBmpEx, BitmapInterpolateScaleFilter(rScaleX, rScaleY));
break;
- case BmpScaleFlag::Default:
- if (GetSizePixel().Width() < 2 || GetSizePixel().Height() < 2)
- bRetval = BitmapFilter::Filter(aBmpEx, BitmapFastScaleFilter(rScaleX, rScaleY));
- else
- bRetval = BitmapFilter::Filter(aBmpEx, BitmapScaleSuperFilter(rScaleX, rScaleY));
+ case BmpScaleFlag::Super:
+ bRetval = BitmapFilter::Filter(aBmpEx, BitmapScaleSuperFilter(rScaleX, rScaleY));
break;
-
- case BmpScaleFlag::Lanczos:
case BmpScaleFlag::BestQuality:
+ case BmpScaleFlag::Lanczos:
bRetval = BitmapFilter::Filter(aBmpEx, vcl::BitmapScaleLanczos3Filter(rScaleX, rScaleY));
break;
More information about the Libreoffice-commits
mailing list