diff options
Diffstat (limited to 'svtools/source/graphic/transformer.cxx')
-rw-r--r-- | svtools/source/graphic/transformer.cxx | 74 |
1 files changed, 40 insertions, 34 deletions
diff --git a/svtools/source/graphic/transformer.cxx b/svtools/source/graphic/transformer.cxx index 1ee2a2428282..070b8bd22b29 100644 --- a/svtools/source/graphic/transformer.cxx +++ b/svtools/source/graphic/transformer.cxx @@ -74,63 +74,69 @@ uno::Reference< graphic::XGraphic > SAL_CALL GraphicTransformer::colorChange( const uno::Reference< graphic::XGraphic >& rxGraphic, sal_Int32 nColorFrom, sal_Int8 nTolerance, sal_Int32 nColorTo, sal_Int8 nAlphaTo ) throw ( lang::IllegalArgumentException, uno::RuntimeException, std::exception) { - const uno::Reference< uno::XInterface > xIFace( rxGraphic, uno::UNO_QUERY ); - ::Graphic aGraphic( *::unographic::Graphic::getImplementation( xIFace ) ); + const uno::Reference< uno::XInterface > xIFace(rxGraphic, uno::UNO_QUERY); + ::Graphic aGraphic(*::unographic::Graphic::getImplementation(xIFace)); + + BitmapColor aBmpColorFrom(static_cast< sal_uInt8 >(nColorFrom), static_cast< sal_uInt8 >(nColorFrom >> 8), static_cast< sal_uInt8 >(nColorFrom >> 16)); + BitmapColor aBmpColorTo( static_cast< sal_uInt8 >(nColorTo), static_cast< sal_uInt8 >(nColorTo >> 8), static_cast< sal_uInt8 >(nColorTo >> 16)); + + Color aColorFrom(aBmpColorFrom.GetColor()); + Color aColorTo(aBmpColorTo.GetColor()); - BitmapColor aColorFrom( static_cast< sal_uInt8 >( nColorFrom ), static_cast< sal_uInt8 >( nColorFrom >> 8 ), static_cast< sal_uInt8 >( nColorFrom >> 16 ) ); - BitmapColor aColorTo( static_cast< sal_uInt8 >( nColorTo ), static_cast< sal_uInt8 >( nColorTo >> 8 ), static_cast< sal_uInt8 >( nColorTo >> 16 ) ); - const sal_uInt8 cIndexFrom = aColorFrom.GetBlueOrIndex(); + const sal_uInt8 cIndexFrom = aBmpColorFrom.GetBlueOrIndex(); - if ( aGraphic.GetType() == GraphicType::Bitmap || aGraphic.GetType() == GraphicType::GdiMetafile ) + if (aGraphic.GetType() == GraphicType::Bitmap || aGraphic.GetType() == GraphicType::GdiMetafile) { - BitmapEx aBitmapEx( aGraphic.GetBitmapEx() ); - Bitmap aBitmap( aBitmapEx.GetBitmap() ); + BitmapEx aBitmapEx(aGraphic.GetBitmapEx()); + Bitmap aBitmap(aBitmapEx.GetBitmap()); - if ( aBitmapEx.IsAlpha() ) + if (aBitmapEx.IsAlpha()) { - AlphaMask aAlphaMask( aBitmapEx.GetAlpha() ); - setAlpha( aBitmap, aAlphaMask, cIndexFrom, nAlphaTo ); - aBitmap.Replace( aColorFrom, aColorTo, nTolerance ); - aGraphic = ::Graphic( BitmapEx( aBitmap, aAlphaMask ) ); + AlphaMask aAlphaMask(aBitmapEx.GetAlpha()); + setAlpha(aBitmap, aAlphaMask, cIndexFrom, nAlphaTo); + aBitmap.Replace(aColorFrom, aColorTo, nTolerance); + aGraphic = ::Graphic(BitmapEx(aBitmap, aAlphaMask)); } - else if ( aBitmapEx.IsTransparent() ) + else if (aBitmapEx.IsTransparent()) { - if ( nAlphaTo == sal::static_int_cast<sal_Int8>(0xff) ) + if (nAlphaTo == sal::static_int_cast< sal_Int8 >(0xff)) { - Bitmap aMask( aBitmapEx.GetMask() ); - Bitmap aMask2( aBitmap.CreateMask( aColorFrom, nTolerance ) ); - aMask.CombineSimple( aMask2, BmpCombine::Or ); - aBitmap.Replace( aColorFrom, aColorTo, nTolerance ); - aGraphic = ::Graphic( BitmapEx( aBitmap, aMask ) ); + Bitmap aMask(aBitmapEx.GetMask()); + Bitmap aMask2(aBitmap.CreateMask(aColorFrom, nTolerance)); + aMask.CombineSimple(aMask2, BmpCombine::Or); + aBitmap.Replace(aColorFrom, aColorTo, nTolerance); + aGraphic = ::Graphic(BitmapEx(aBitmap, aMask)); } else { - AlphaMask aAlphaMask( aBitmapEx.GetMask() ); - setAlpha( aBitmap, aAlphaMask, cIndexFrom, 0xff - nAlphaTo ); - aBitmap.Replace( aColorFrom, aColorTo, nTolerance ); - aGraphic = ::Graphic( BitmapEx( aBitmap, aAlphaMask ) ); + AlphaMask aAlphaMask(aBitmapEx.GetMask()); + setAlpha(aBitmap, aAlphaMask, cIndexFrom, 0xff - nAlphaTo); + aBitmap.Replace(aColorFrom, aColorTo, nTolerance); + aGraphic = ::Graphic(BitmapEx(aBitmap, aAlphaMask)); } } else { - if ( ( nAlphaTo == 0 ) || ( nAlphaTo == sal::static_int_cast<sal_Int8>(0xff) ) ) + if ((nAlphaTo == 0) || (nAlphaTo == sal::static_int_cast< sal_Int8 >(0xff))) { - Bitmap aMask( aBitmap.CreateMask( aColorFrom, nTolerance ) ); - aBitmap.Replace( aColorFrom, aColorTo, nTolerance ); - aGraphic = ::Graphic( BitmapEx( aBitmap, aMask ) ); + Bitmap aMask(aBitmap.CreateMask(aColorFrom, nTolerance)); + aBitmap.Replace(aColorFrom, aColorTo, nTolerance); + aGraphic = ::Graphic(BitmapEx(aBitmap, aMask)); } else { - AlphaMask aAlphaMask( aBitmapEx.GetSizePixel() ); - setAlpha( aBitmap, aAlphaMask, cIndexFrom, nAlphaTo ); - aBitmap.Replace( aColorFrom, aColorTo, nTolerance ); - aGraphic = ::Graphic( BitmapEx( aBitmap, aAlphaMask ) ); + AlphaMask aAlphaMask(aBitmapEx.GetSizePixel()); + setAlpha(aBitmap, aAlphaMask, cIndexFrom, nAlphaTo); + aBitmap.Replace(aColorFrom, aColorTo, nTolerance); + aGraphic = ::Graphic(BitmapEx(aBitmap, aAlphaMask)); } } } + ::unographic::Graphic* pUnoGraphic = new ::unographic::Graphic(); - pUnoGraphic->init( aGraphic ); - uno::Reference< graphic::XGraphic > xRet( pUnoGraphic ); + pUnoGraphic->init(aGraphic); + uno::Reference< graphic::XGraphic > xRet(pUnoGraphic); + return xRet; } |