vcl/qa/cppunit/graphicfilter/filters-test.cxx | 20 ++++++++++++++++++++ vcl/source/gdi/bitmap3.cxx | 19 ++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-)
New commits: commit 1d4bbe7b305558faf86aa083cc50d71a7804ef7d Author: Michael Meeks <[email protected]> Date: Mon May 13 22:32:32 2013 +0100 vcl: attempt to fix high quality scaling to get aspect ratio right. Change-Id: Ic62c6a16c39dd4e4e19bf9a96503ecf6ac50f292 diff --git a/vcl/qa/cppunit/graphicfilter/filters-test.cxx b/vcl/qa/cppunit/graphicfilter/filters-test.cxx index 23f2978..7d73e2c 100644 --- a/vcl/qa/cppunit/graphicfilter/filters-test.cxx +++ b/vcl/qa/cppunit/graphicfilter/filters-test.cxx @@ -38,8 +38,12 @@ public: */ void testCVEs(); + /// test scaling + void testScaling(); + CPPUNIT_TEST_SUITE(VclFiltersTest); CPPUNIT_TEST(testCVEs); + CPPUNIT_TEST(testScaling); CPPUNIT_TEST_SUITE_END(); }; @@ -53,6 +57,22 @@ bool VclFiltersTest::load(const OUString &, return aGraphicFilter.ImportGraphic(aGraphic, rURL, aFileStream) == 0; } +void VclFiltersTest::testScaling() +{ + for (unsigned int i = BMP_SCALE_FAST; i <= BMP_SCALE_BOX; i++) + { + Bitmap aBitmap( Size( 413, 409 ), 24 ); + BitmapEx aBitmapEx( aBitmap ); + + fprintf( stderr, "scale with type %d\n", i ); + CPPUNIT_ASSERT( aBitmapEx.Scale( 0.1937046, 0.193154, i ) ); + Size aAfter( aBitmapEx.GetSizePixel() ); + fprintf( stderr, "size %ld, %ld\n", (long)aAfter.Width(), + aAfter.Height() ); + CPPUNIT_ASSERT( labs (aAfter.Height() - aAfter.Width()) <= 1 ); + } +} + void VclFiltersTest::testCVEs() { #ifndef DISABLE_CVE_TESTS diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx index e639b36..5b56ae4 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; } }
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
