diff options
author | Michael Meeks <michael.meeks@suse.com> | 2013-05-13 22:32:32 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-05-14 15:53:06 +0100 |
commit | 1d4bbe7b305558faf86aa083cc50d71a7804ef7d (patch) | |
tree | 287bbd0a100391087f1766d11fab022b2b1e573b /vcl/source | |
parent | d97732f635c0583fbeea5706399ba9197903dc83 (diff) |
vcl: attempt to fix high quality scaling to get aspect ratio right.
Change-Id: Ic62c6a16c39dd4e4e19bf9a96503ecf6ac50f292
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/gdi/bitmap3.cxx | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx index e639b360098f..5b56ae4d9b7b 100644 --- a/vcl/source/gdi/bitmap3.cxx +++ b/vcl/source/gdi/bitmap3.cxx @@ -2368,7 +2368,7 @@ namespace } // #i121233# Added BMP_SCALE_LANCZOS, BMP_SCALE_BICUBIC, BMP_SCALE_BILINEAR and -// BMP_SCALE_BOX derived from the original commit from Toma Vajngerl (see +// BMP_SCALE_BOX derived from the original commit from Tomas Vajngerl (see // bugzilla task for deitails) Thanks! sal_Bool Bitmap::ImplScaleConvolution( const double& rScaleX, @@ -2426,29 +2426,38 @@ sal_Bool Bitmap::ImplScaleConvolution( const sal_uInt32 nInBetweenSizeHorFirst(nHeight * nNewWidth); const sal_uInt32 nInBetweenSizeVerFirst(nNewHeight * nWidth); + Bitmap aInterm; if(nInBetweenSizeHorFirst < nInBetweenSizeVerFirst) { if(bScaleHor) { - bResult = ImplScaleConvolutionHor(*this, aResult, fScaleX, aKernel); + bResult = ImplScaleConvolutionHor(*this, aInterm, fScaleX, aKernel); } + else + aInterm = *this; if(bResult && bScaleVer) { - bResult = ImplScaleConvolutionVer(*this, aResult, fScaleY, aKernel); + bResult = ImplScaleConvolutionVer(aInterm, aResult, fScaleY, aKernel); } + else + aResult = aInterm; } else { if(bScaleVer) { - bResult = ImplScaleConvolutionVer(*this, aResult, fScaleY, aKernel); + bResult = ImplScaleConvolutionVer(*this, aInterm, fScaleY, aKernel); } + else + aInterm = *this; if(bResult && bScaleHor) { - bResult = ImplScaleConvolutionHor(*this, aResult, fScaleX, aKernel); + bResult = ImplScaleConvolutionHor(aInterm, aResult, fScaleX, aKernel); } + else + aResult = aInterm; } } |