summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/bitmap.hxx13
-rw-r--r--vcl/source/gdi/bitmap3.cxx18
2 files changed, 18 insertions, 13 deletions
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;