svtools/source/graphic/grfmgr2.cxx | 60 +++++------ vcl/inc/vcl/alpha.hxx | 187 ++++++++++++++++++------------------- vcl/source/gdi/alpha.cxx | 57 ++++++----- vcl/source/gdi/bitmap3.cxx | 6 - vcl/source/gdi/bitmapex.cxx | 53 ++++++---- 5 files changed, 191 insertions(+), 172 deletions(-)
New commits: commit 42801a0e690a63c3a94b1d8256b6c7cd64856bd2 Author: Tomaž Vajngerl <qui...@gmail.com> Date: Tue Aug 14 20:39:14 2012 +0200 Fix transparent bitmap rendering. Convert transparent mask to 8bit-grey after scale/rotate/crop transformation. Use correct perspective at rendering. Change-Id: I80b19d7bec880b0c58709c7c5bee6199cbc815c9 diff --git a/svtools/source/graphic/grfmgr2.cxx b/svtools/source/graphic/grfmgr2.cxx index dc6c3c7..f738998 100644 --- a/svtools/source/graphic/grfmgr2.cxx +++ b/svtools/source/graphic/grfmgr2.cxx @@ -270,43 +270,43 @@ sal_Bool GraphicManager::ImplCreateOutput( OutputDevice* pOutputDevice, const sal_uLong nFlags, BitmapEx* pResultBitmapEx ) { bool bRet = false; - Point aOutPointInPixels; - Size aOutSizeInPixels; - int nRotation = rAttributes.GetRotation() % 3600; Point aUnrotatedPointInPixels( pOutputDevice->LogicToPixel( rPoint ) ); Size aUnrotatedSizeInPixels( pOutputDevice->LogicToPixel( rSize ) ); - BitmapEx aBitmapEx( rBitmapEx ); - - if( !aUnrotatedSizeInPixels.Width() || !aUnrotatedSizeInPixels.Height() ) + if( aUnrotatedSizeInPixels.Width() <= 0 || aUnrotatedSizeInPixels.Height() <= 0) return false; - if( nRotation ) + Point aOutPointInPixels; + Size aOutSizeInPixels; + BitmapEx aBitmapEx( rBitmapEx ); + int nRotation = rAttributes.GetRotation() % 3600; + + if( nRotation != 0 ) { Polygon aPoly( Rectangle( rPoint, rSize ) ); aPoly.Rotate( rPoint, nRotation ); const Rectangle aRotationBoundRect( aPoly.GetBoundRect() ); aOutPointInPixels = pOutputDevice->LogicToPixel( aRotationBoundRect.TopLeft() ); - aOutSizeInPixels = pOutputDevice->LogicToPixel( aRotationBoundRect.GetSize() ); + aOutSizeInPixels = pOutputDevice->LogicToPixel( aRotationBoundRect.GetSize() ); } else { aOutPointInPixels = aUnrotatedPointInPixels; - aOutSizeInPixels = aUnrotatedSizeInPixels; + aOutSizeInPixels = aUnrotatedSizeInPixels; } Point aOutPoint; Size aOutSize; const Size& rBitmapSizePixels = rBitmapEx.GetSizePixel(); - Rectangle aCropRectangle(-1, -1, -1, -1); + Rectangle aCropRectangle(0, 0, 0, 0); + bool isHorizontalMirrored = ( rAttributes.GetMirrorFlags() & BMP_MIRROR_HORZ ) != 0; bool isVerticalMirrored = ( rAttributes.GetMirrorFlags() & BMP_MIRROR_VERT ) != 0; - // calculate output sizes - if( !pResultBitmapEx ) + if( true || !pResultBitmapEx ) { Rectangle aBitmapRectangle( aOutPointInPixels, aOutSizeInPixels ); Rectangle aOutRect( Point(), pOutputDevice->GetOutputSizePixel() ); @@ -316,9 +316,7 @@ sal_Bool GraphicManager::ImplCreateOutput( OutputDevice* pOutputDevice, const Region aPaintRegion( ( (Window*) pOutputDevice )->GetPaintRegion() ); if( !aPaintRegion.IsNull() ) - { aOutRect.Intersection( pOutputDevice->LogicToPixel( aPaintRegion.GetBoundRect() ) ); - } } aOutRect.Intersection( aBitmapRectangle ); @@ -346,31 +344,28 @@ sal_Bool GraphicManager::ImplCreateOutput( OutputDevice* pOutputDevice, } - if( aCropRectangle.GetWidth() <= 0 && aCropRectangle.GetHeight() <= 0) + if( aCropRectangle.GetWidth() <= 0 && aCropRectangle.GetHeight() <= 0 ) return false; // do transformation - if( !isHorizontalMirrored && !isVerticalMirrored && !nRotation && aOutSizeInPixels == rBitmapSizePixels) { + // simple copy thorugh aOutPoint = pOutputDevice->PixelToLogic( aOutPointInPixels ); aOutSize = pOutputDevice->PixelToLogic( aOutSizeInPixels ); bRet = true; } else { - // calculate scaling factors - double fScaleX = aUnrotatedSizeInPixels.Width() / (double) rBitmapSizePixels.Width(); - double fScaleY = aUnrotatedSizeInPixels.Height() / (double) rBitmapSizePixels.Height(); - // mirror the image - this should not impact the picture dimenstions if( isHorizontalMirrored || isVerticalMirrored ) bRet = aBitmapEx.Mirror( rAttributes.GetMirrorFlags() ); - if (nRotation) + // prepare rotation if needed + if (nRotation != 0) { Polygon aPoly( Rectangle( Point(), aUnrotatedSizeInPixels) ); aPoly.Rotate( Point(), nRotation ); @@ -382,7 +377,12 @@ sal_Bool GraphicManager::ImplCreateOutput( OutputDevice* pOutputDevice, aCropRectangle.Right() + aNewBound.Left(), aCropRectangle.Bottom() + aNewBound.Top() ); } - if( nFlags & GRFMGR_DRAW_SMOOTHSCALE) + + // calculate scaling factors + double fScaleX = aUnrotatedSizeInPixels.Width() / (double) rBitmapSizePixels.Width(); + double fScaleY = aUnrotatedSizeInPixels.Height() / (double) rBitmapSizePixels.Height(); + + if( nFlags & GRFMGR_DRAW_SMOOTHSCALE ) { bRet = aBitmapEx.ScaleCropRotate( fScaleX, fScaleY, aCropRectangle, nRotation, COL_TRANSPARENT ); } @@ -390,12 +390,12 @@ sal_Bool GraphicManager::ImplCreateOutput( OutputDevice* pOutputDevice, { aCropRectangle = Rectangle ( aCropRectangle.Left() / fScaleX, - aCropRectangle.Right() / fScaleX, aCropRectangle.Top() / fScaleY, + aCropRectangle.Right() / fScaleX, aCropRectangle.Bottom() / fScaleY ); bRet = aBitmapEx.Crop( aCropRectangle ); - if (bRet) + if ( bRet ) bRet = aBitmapEx.Scale( fScaleX, fScaleY ); } } @@ -403,17 +403,17 @@ sal_Bool GraphicManager::ImplCreateOutput( OutputDevice* pOutputDevice, if( bRet ) { // attribute adjustment if neccessary - if( rAttributes.IsSpecialDrawMode() - || rAttributes.IsAdjusted() - || rAttributes.IsTransparent() ) + if( rAttributes.IsSpecialDrawMode() + || rAttributes.IsAdjusted() + || rAttributes.IsTransparent() ) { ImplAdjust( aBitmapEx, rAttributes, ADJUSTMENT_DRAWMODE | ADJUSTMENT_COLORS | ADJUSTMENT_TRANSPARENCY ); } // OutDev adjustment if neccessary - if( pOutputDevice->GetOutDevType() != OUTDEV_PRINTER - && pOutputDevice->GetBitCount() <= 8 - && aBitmapEx.GetBitCount() >= 8 ) + if( pOutputDevice->GetOutDevType() != OUTDEV_PRINTER + && pOutputDevice->GetBitCount() <= 8 + && aBitmapEx.GetBitCount() >= 8 ) { aBitmapEx.Dither( BMP_DITHER_MATRIX ); } diff --git a/vcl/inc/vcl/alpha.hxx b/vcl/inc/vcl/alpha.hxx index 45eed35..d0ceb92 100644 --- a/vcl/inc/vcl/alpha.hxx +++ b/vcl/inc/vcl/alpha.hxx @@ -52,104 +52,107 @@ private: public: - AlphaMask(); - AlphaMask( const Bitmap& rBitmap ); - AlphaMask( const AlphaMask& rAlphaMask ); - AlphaMask( const Size& rSizePixel, sal_uInt8* pEraseTransparency = NULL ); - ~AlphaMask(); - - AlphaMask& operator=( const Bitmap& rBitmap ); - AlphaMask& operator=( const AlphaMask& rAlphaMask ) - { - return (AlphaMask&) Bitmap::operator=( rAlphaMask ); - } - sal_Bool operator!() const - { - return Bitmap::operator!(); - } - sal_Bool operator==( const AlphaMask& rAlphaMask ) const - { - return Bitmap::operator==( rAlphaMask ); - } - sal_Bool operator!=( const AlphaMask& rAlphaMask ) const - { - return Bitmap::operator!=( rAlphaMask ); - } - - const MapMode& GetPrefMapMode() const - { - return Bitmap::GetPrefMapMode(); - } - void SetPrefMapMode( const MapMode& rMapMode ) - { - Bitmap::SetPrefMapMode( rMapMode ); - } - - const Size& GetPrefSize() const - { - return Bitmap::GetPrefSize(); - } - void SetPrefSize( const Size& rSize ) - { - Bitmap::SetPrefSize( rSize ); - } - - Size GetSizePixel() const - { - return Bitmap::GetSizePixel(); - } - - sal_uLong GetSizeBytes() const - { - return Bitmap::GetSizeBytes(); - } - sal_uLong GetChecksum() const - { - return Bitmap::GetChecksum(); - } - - Bitmap GetBitmap() const; - - sal_Bool CopyPixel( - const Rectangle& rRectDst, - const Rectangle& rRectSrc, - const AlphaMask* pAlphaSrc = NULL - ); - sal_Bool Erase( sal_uInt8 cTransparency ); - sal_Bool Replace( const Bitmap& rMask, sal_uInt8 rReplaceTransparency ); - sal_Bool Replace( - sal_uInt8 cSearchTransparency, - sal_uInt8 cReplaceTransparency, - sal_uLong nTol = 0UL - ); - - BitmapReadAccess* AcquireReadAccess() - { - return Bitmap::AcquireReadAccess(); - } - BitmapWriteAccess* AcquireWriteAccess() - { - return Bitmap::AcquireWriteAccess(); - } - void ReleaseAccess( BitmapReadAccess* pAccess ); + AlphaMask(); + AlphaMask( const Bitmap& rBitmap ); + AlphaMask( const AlphaMask& rAlphaMask ); + AlphaMask( const Size& rSizePixel, sal_uInt8* pEraseTransparency = NULL ); + ~AlphaMask(); + + AlphaMask& operator=( const Bitmap& rBitmap ); + AlphaMask& operator=( const AlphaMask& rAlphaMask ) + { + return (AlphaMask&) Bitmap::operator=( rAlphaMask ); + } + + sal_Bool operator!() const + { + return Bitmap::operator!(); + } + + sal_Bool operator==( const AlphaMask& rAlphaMask ) const + { + return Bitmap::operator==( rAlphaMask ); + } + + sal_Bool operator!=( const AlphaMask& rAlphaMask ) const + { + return Bitmap::operator!=( rAlphaMask ); + } + + const MapMode& GetPrefMapMode() const + { + return Bitmap::GetPrefMapMode(); + } + + void SetPrefMapMode( const MapMode& rMapMode ) + { + Bitmap::SetPrefMapMode( rMapMode ); + } + + const Size& GetPrefSize() const + { + return Bitmap::GetPrefSize(); + } + + void SetPrefSize( const Size& rSize ) + { + Bitmap::SetPrefSize( rSize ); + } + + Size GetSizePixel() const + { + return Bitmap::GetSizePixel(); + } + + sal_uLong GetSizeBytes() const + { + return Bitmap::GetSizeBytes(); + } + sal_uLong GetChecksum() const + { + return Bitmap::GetChecksum(); + } + + Bitmap GetBitmap() const; + + sal_Bool CopyPixel( const Rectangle& rRectDst, const Rectangle& rRectSrc, + const AlphaMask* pAlphaSrc = NULL); + + sal_Bool Erase( sal_uInt8 cTransparency ); + sal_Bool Replace( const Bitmap& rMask, sal_uInt8 rReplaceTransparency ); + sal_Bool Replace( sal_uInt8 cSearchTransparency, sal_uInt8 cReplaceTransparency, + sal_uLong nTol = 0UL ); + + sal_Bool Scale( const Size& rNewSize, sal_uLong nScaleFlag ); + sal_Bool Scale( const double& rScaleX, const double& rScaleY, sal_uLong nScaleFlag = BMP_SCALE_DEFAULT ); + sal_Bool ScaleCropRotate( const double& rScaleX, const double& rScaleY, const Rectangle& rRectPixel, long nAngle10, + const Color& rFillColor, sal_uLong nScaleFlag = BMP_SCALE_DEFAULT ); + + BitmapReadAccess* AcquireReadAccess() + { + return Bitmap::AcquireReadAccess(); + } + + BitmapWriteAccess* AcquireWriteAccess() + { + return Bitmap::AcquireWriteAccess(); + } + + void ReleaseAccess( BitmapReadAccess* pAccess ); typedef vcl::ScopedBitmapAccess< BitmapReadAccess, AlphaMask, &AlphaMask::AcquireReadAccess > ScopedReadAccess; typedef vcl::ScopedBitmapAccess< BitmapWriteAccess, AlphaMask, &AlphaMask::AcquireWriteAccess > ScopedWriteAccess; - sal_Bool Read( SvStream& rIStm, sal_Bool bFileHeader = sal_True ) - { - return Bitmap::Read( rIStm, bFileHeader ); - } - sal_Bool Write( - SvStream& rOStm, - sal_Bool bCompressed = sal_True, - sal_Bool bFileHeader = sal_True - ) const - { - return Bitmap::Write( rOStm, bCompressed, bFileHeader ); - } + sal_Bool Read( SvStream& rIStm, sal_Bool bFileHeader = sal_True ) + { + return Bitmap::Read( rIStm, bFileHeader ); + } + sal_Bool Write( SvStream& rOStm, sal_Bool bCompressed = sal_True, sal_Bool bFileHeader = sal_True ) const + { + return Bitmap::Write( rOStm, bCompressed, bFileHeader ); + } friend VCL_DLLPUBLIC SvStream& operator<<( SvStream& rOStm, const BitmapEx& rBitmapEx ); friend VCL_DLLPUBLIC SvStream& operator>>( SvStream& rIStm, BitmapEx& rBitmapEx ); diff --git a/vcl/source/gdi/alpha.cxx b/vcl/source/gdi/alpha.cxx index cbaf138..0c2ad36 100644 --- a/vcl/source/gdi/alpha.cxx +++ b/vcl/source/gdi/alpha.cxx @@ -39,8 +39,6 @@ AlphaMask::AlphaMask() { } -// ----------------------------------------------------------------------------- - AlphaMask::AlphaMask( const Bitmap& rBitmap ) : Bitmap( rBitmap ) { @@ -48,15 +46,11 @@ AlphaMask::AlphaMask( const Bitmap& rBitmap ) : Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); } -// ----------------------------------------------------------------------------- - AlphaMask::AlphaMask( const AlphaMask& rAlphaMask ) : Bitmap( rAlphaMask ) { } -// ----------------------------------------------------------------------------- - AlphaMask::AlphaMask( const Size& rSizePixel, sal_uInt8* pEraseTransparency ) : Bitmap( rSizePixel, 8, &Bitmap::GetGreyPalette( 256 ) ) { @@ -64,14 +58,10 @@ AlphaMask::AlphaMask( const Size& rSizePixel, sal_uInt8* pEraseTransparency ) : Bitmap::Erase( Color( *pEraseTransparency, *pEraseTransparency, *pEraseTransparency ) ); } -// ----------------------------------------------------------------------------- - AlphaMask::~AlphaMask() { } -// ----------------------------------------------------------------------------- - AlphaMask& AlphaMask::operator=( const Bitmap& rBitmap ) { *(Bitmap*) this = rBitmap; @@ -82,30 +72,22 @@ AlphaMask& AlphaMask::operator=( const Bitmap& rBitmap ) return *this; } -// ----------------------------------------------------------------------------- - const Bitmap& AlphaMask::ImplGetBitmap() const { return( (const Bitmap&) *this ); } -// ----------------------------------------------------------------------------- - void AlphaMask::ImplSetBitmap( const Bitmap& rBitmap ) { DBG_ASSERT( ( 8 == rBitmap.GetBitCount() ) && rBitmap.HasGreyPalette(), "AlphaMask::ImplSetBitmap: invalid bitmap" ); *(Bitmap*) this = rBitmap; } -// ----------------------------------------------------------------------------- - Bitmap AlphaMask::GetBitmap() const { return ImplGetBitmap(); } -// ----------------------------------------------------------------------------- - sal_Bool AlphaMask::CopyPixel( const Rectangle& rRectDst, const Rectangle& rRectSrc, const AlphaMask* pAlphaSrc ) { @@ -215,15 +197,11 @@ sal_Bool AlphaMask::CopyPixel( const Rectangle& rRectDst, const Rectangle& rRect } -// ----------------------------------------------------------------------------- - sal_Bool AlphaMask::Erase( sal_uInt8 cTransparency ) { return Bitmap::Erase( Color( cTransparency, cTransparency, cTransparency ) ); } -// ----------------------------------------------------------------------------- - sal_Bool AlphaMask::Replace( const Bitmap& rMask, sal_uInt8 cReplaceTransparency ) { BitmapReadAccess* pMaskAcc = ( (Bitmap&) rMask ).AcquireReadAccess(); @@ -249,8 +227,6 @@ sal_Bool AlphaMask::Replace( const Bitmap& rMask, sal_uInt8 cReplaceTransparency return bRet; } -// ----------------------------------------------------------------------------- - sal_Bool AlphaMask::Replace( sal_uInt8 cSearchTransparency, sal_uInt8 cReplaceTransparency, sal_uLong #ifdef DBG_UTIL nTol @@ -302,8 +278,6 @@ nTol return bRet; } -// ----------------------------------------------------------------------------- - void AlphaMask::ReleaseAccess( BitmapReadAccess* pAccess ) { if( pAccess ) @@ -313,4 +287,35 @@ void AlphaMask::ReleaseAccess( BitmapReadAccess* pAccess ) } } +sal_Bool AlphaMask::Scale( const Size& rNewSize, sal_uLong nScaleFlag ) +{ + sal_Bool bRet = Bitmap::Scale( rNewSize, nScaleFlag ); + + if( bRet ) + Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); + + return bRet; +} + +sal_Bool AlphaMask::Scale( const double& rScaleX, const double& rScaleY, sal_uLong nScaleFlag ) +{ + sal_Bool bRet = Bitmap::Scale( rScaleX, rScaleY, nScaleFlag ); + + if( bRet ) + Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); + + return bRet; +} + +sal_Bool AlphaMask::ScaleCropRotate( + const double& rScaleX, const double& rScaleY, const Rectangle& rRectPixel, long nAngle10, + const Color& rFillColor, sal_uLong nScaleFlag ) +{ + sal_Bool bRet = Bitmap::ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, rFillColor, nScaleFlag ); + if( bRet ) + Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); + + return bRet; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx index 1ce4253..a4900c6 100644 --- a/vcl/source/gdi/bitmap3.cxx +++ b/vcl/source/gdi/bitmap3.cxx @@ -2325,7 +2325,7 @@ sal_Bool Bitmap::ScaleCropRotate( } else { - bRet = ImplTransformBilinearFiltering( rScaleX, rScaleY, rRectPixel, nAngle10, rFillColor); + bRet = ImplTransformBilinearFiltering( rScaleX, rScaleY, rRectPixel, nAngle10, rFillColor); } return bRet; @@ -2384,9 +2384,9 @@ bool Bitmap::ImplTransformAveraging( const double& rScaleX, const double& rScale double unrotatedY = fSinAngle * x + fCosAngle * y; if ( unrotatedX < 0 - || unrotatedX >= nScaledWidth + || unrotatedX > nScaledWidth || unrotatedY < 0 - || unrotatedY >= nScaledHeight) + || unrotatedY > nScaledHeight) { pWriteAccess->SetPixel( yOut, xOut, aFillColor ); } diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx index e7df476..5851b74 100644 --- a/vcl/source/gdi/bitmapex.cxx +++ b/vcl/source/gdi/bitmapex.cxx @@ -276,14 +276,16 @@ Bitmap BitmapEx::GetMask() const AlphaMask BitmapEx::GetAlpha() const { - AlphaMask aAlpha; - if( IsAlpha() ) + { + AlphaMask aAlpha; aAlpha.ImplSetBitmap( aMask ); + return aAlpha; + } else - aAlpha = aMask; - - return aAlpha; + { + return aMask; + } } sal_uLong BitmapEx::GetSizeBytes() const @@ -391,47 +393,56 @@ sal_Bool BitmapEx::ScaleCropRotate( const double& rScaleX, const double& rScaleY, const Rectangle& rRectPixel, long nAngle10, const Color& rFillColor, sal_uLong nScaleFlag ) { - bool bRet = false; + bool bReturn = false; if( !!aBitmap ) { - const bool bTransparentRotate = ( Color( COL_TRANSPARENT ) == rFillColor ); + // If fill color is transpatent + const bool bTransparentRotation = Color( COL_TRANSPARENT ) == rFillColor; - bool bRightAngleRotation = (nAngle10 == 0 || nAngle10 == 900 || nAngle10 == 1800 || nAngle10 == 2700); + // If angle is 0, 90, 180 or 270 degreees, then we don't need to create an alpha bitmap. + const bool bRightAngleRotation = (nAngle10 == 0 || nAngle10 == 900 || nAngle10 == 1800 || nAngle10 == 2700); - if( !bRightAngleRotation && bTransparentRotate ) + if( !bRightAngleRotation && bTransparentRotation ) { if( eTransparent == TRANSPARENT_COLOR ) { - bRet = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, aTransparentColor, nScaleFlag ); + bReturn = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, aTransparentColor, nScaleFlag ); } - else + else if( eTransparent == TRANSPARENT_NONE ) { - bRet = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_BLACK, nScaleFlag ); - if( eTransparent == TRANSPARENT_NONE ) + bReturn = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_BLACK, nScaleFlag ); + if ( bReturn ) { aMask = Bitmap( aBitmapSize, 1 ); aMask.Erase( COL_BLACK ); + aMask.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_WHITE, nScaleFlag ); eTransparent = TRANSPARENT_BITMAP; } - - if( bRet && !!aMask ) + } else { + bReturn = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_BLACK, nScaleFlag ); + if( bReturn && !!aMask ) + { aMask.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_WHITE, nScaleFlag ); + aMask.Convert( BMP_CONVERSION_8BIT_GREYS ); + } } } else { - bRet = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, rFillColor, nScaleFlag ); - - if( bRet && ( eTransparent == TRANSPARENT_BITMAP ) && !!aMask ) - aMask.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_WHITE, nScaleFlag ); + bReturn = aBitmap.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, rFillColor, nScaleFlag ); + if( eTransparent == TRANSPARENT_BITMAP && !!aMask ) + { + bReturn = aMask.ScaleCropRotate( rScaleX, rScaleY, rRectPixel, nAngle10, COL_WHITE, nScaleFlag ); + aMask.Convert( BMP_CONVERSION_8BIT_GREYS ); + } } } - if (bRet) + if ( bReturn ) aBitmapSize = aBitmap.GetSizePixel(); - return bRet; + return bReturn; } sal_Bool BitmapEx::Rotate( long nAngle10, const Color& rFillColor )
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits