diff options
author | Chris Sherlock <chris.sherlock79@gmail.com> | 2014-04-22 01:22:21 +1000 |
---|---|---|
committer | Chris Sherlock <chris.sherlock79@gmail.com> | 2014-04-22 02:30:39 +1000 |
commit | f9fa335da091c12ddf5f7eff37230e9bc6ae7012 (patch) | |
tree | c166367a756e44b47f2bf332fecf5b979992fc93 /vcl | |
parent | 3f52bc19d508863267ca09c761dc08f773da48bc (diff) |
Move DownsizeBitmap from gdi/print2.cxx to outdev/bitmap.cxx
Change-Id: Ib10024fe92ae364d31082177724be718d426fe26
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/print2.cxx | 67 | ||||
-rw-r--r-- | vcl/source/outdev/bitmap.cxx | 67 |
2 files changed, 67 insertions, 67 deletions
diff --git a/vcl/source/gdi/print2.cxx b/vcl/source/gdi/print2.cxx index ca77fcce8c7d..3f838f129c7c 100644 --- a/vcl/source/gdi/print2.cxx +++ b/vcl/source/gdi/print2.cxx @@ -1342,73 +1342,6 @@ bool OutputDevice::RemoveTransparenciesFromMetaFile( const GDIMetaFile& rInMtf, return bTransparent; } -Bitmap OutputDevice::GetDownsampledBitmap( const Size& rDstSz, - const Point& rSrcPt, const Size& rSrcSz, - const Bitmap& rBmp, long nMaxBmpDPIX, long nMaxBmpDPIY ) -{ - Bitmap aBmp( rBmp ); - - if( !aBmp.IsEmpty() ) - { - Point aPoint; - const Rectangle aBmpRect( aPoint, aBmp.GetSizePixel() ); - Rectangle aSrcRect( rSrcPt, rSrcSz ); - - // do cropping if necessary - if( aSrcRect.Intersection( aBmpRect ) != aBmpRect ) - { - if( !aSrcRect.IsEmpty() ) - aBmp.Crop( aSrcRect ); - else - aBmp.SetEmpty(); - } - - if( !aBmp.IsEmpty() ) - { - // do downsampling if necessary - Size aDstSizeTwip( PixelToLogic( LogicToPixel( rDstSz ), MAP_TWIP ) ); - - // #103209# Normalize size (mirroring has to happen outside of this method) - aDstSizeTwip = Size( labs(aDstSizeTwip.Width()), labs(aDstSizeTwip.Height()) ); - - const Size aBmpSize( aBmp.GetSizePixel() ); - const double fBmpPixelX = aBmpSize.Width(); - const double fBmpPixelY = aBmpSize.Height(); - const double fMaxPixelX = aDstSizeTwip.Width() * nMaxBmpDPIX / 1440.0; - const double fMaxPixelY = aDstSizeTwip.Height() * nMaxBmpDPIY / 1440.0; - - // check, if the bitmap DPI exceeds the maximum DPI (allow 4 pixel rounding tolerance) - if( ( ( fBmpPixelX > ( fMaxPixelX + 4 ) ) || - ( fBmpPixelY > ( fMaxPixelY + 4 ) ) ) && - ( fBmpPixelY > 0.0 ) && ( fMaxPixelY > 0.0 ) ) - { - // do scaling - Size aNewBmpSize; - const double fBmpWH = fBmpPixelX / fBmpPixelY; - const double fMaxWH = fMaxPixelX / fMaxPixelY; - - if( fBmpWH < fMaxWH ) - { - aNewBmpSize.Width() = FRound( fMaxPixelY * fBmpWH ); - aNewBmpSize.Height() = FRound( fMaxPixelY ); - } - else if( fBmpWH > 0.0 ) - { - aNewBmpSize.Width() = FRound( fMaxPixelX ); - aNewBmpSize.Height() = FRound( fMaxPixelX / fBmpWH); - } - - if( aNewBmpSize.Width() && aNewBmpSize.Height() ) - aBmp.Scale( aNewBmpSize ); - else - aBmp.SetEmpty(); - } - } - } - - return aBmp; -} - void Printer::DrawGradientEx( OutputDevice* pOut, const Rectangle& rRect, const Gradient& rGradient ) { const PrinterOptions& rPrinterOptions = GetPrinterOptions(); diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx index 46478170aab1..d29aa6a88a4b 100644 --- a/vcl/source/outdev/bitmap.cxx +++ b/vcl/source/outdev/bitmap.cxx @@ -160,6 +160,73 @@ void OutputDevice::DrawBitmap( const Point& rDestPt, const Size& rDestSize, } } +Bitmap OutputDevice::GetDownsampledBitmap( const Size& rDstSz, + const Point& rSrcPt, const Size& rSrcSz, + const Bitmap& rBmp, long nMaxBmpDPIX, long nMaxBmpDPIY ) +{ + Bitmap aBmp( rBmp ); + + if( !aBmp.IsEmpty() ) + { + Point aPoint; + const Rectangle aBmpRect( aPoint, aBmp.GetSizePixel() ); + Rectangle aSrcRect( rSrcPt, rSrcSz ); + + // do cropping if necessary + if( aSrcRect.Intersection( aBmpRect ) != aBmpRect ) + { + if( !aSrcRect.IsEmpty() ) + aBmp.Crop( aSrcRect ); + else + aBmp.SetEmpty(); + } + + if( !aBmp.IsEmpty() ) + { + // do downsampling if necessary + Size aDstSizeTwip( PixelToLogic( LogicToPixel( rDstSz ), MAP_TWIP ) ); + + // #103209# Normalize size (mirroring has to happen outside of this method) + aDstSizeTwip = Size( labs(aDstSizeTwip.Width()), labs(aDstSizeTwip.Height()) ); + + const Size aBmpSize( aBmp.GetSizePixel() ); + const double fBmpPixelX = aBmpSize.Width(); + const double fBmpPixelY = aBmpSize.Height(); + const double fMaxPixelX = aDstSizeTwip.Width() * nMaxBmpDPIX / 1440.0; + const double fMaxPixelY = aDstSizeTwip.Height() * nMaxBmpDPIY / 1440.0; + + // check, if the bitmap DPI exceeds the maximum DPI (allow 4 pixel rounding tolerance) + if( ( ( fBmpPixelX > ( fMaxPixelX + 4 ) ) || + ( fBmpPixelY > ( fMaxPixelY + 4 ) ) ) && + ( fBmpPixelY > 0.0 ) && ( fMaxPixelY > 0.0 ) ) + { + // do scaling + Size aNewBmpSize; + const double fBmpWH = fBmpPixelX / fBmpPixelY; + const double fMaxWH = fMaxPixelX / fMaxPixelY; + + if( fBmpWH < fMaxWH ) + { + aNewBmpSize.Width() = FRound( fMaxPixelY * fBmpWH ); + aNewBmpSize.Height() = FRound( fMaxPixelY ); + } + else if( fBmpWH > 0.0 ) + { + aNewBmpSize.Width() = FRound( fMaxPixelX ); + aNewBmpSize.Height() = FRound( fMaxPixelX / fBmpWH); + } + + if( aNewBmpSize.Width() && aNewBmpSize.Height() ) + aBmp.Scale( aNewBmpSize ); + else + aBmp.SetEmpty(); + } + } + } + + return aBmp; +} + void OutputDevice::DrawBitmapEx( const Point& rDestPt, const BitmapEx& rBitmapEx ) { |