diff -r 000000000000 -r 2014ca87e772 imagehandlinglib/Src/IHLBitmapUtil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagehandlinglib/Src/IHLBitmapUtil.cpp Tue Jan 26 15:18:05 2010 +0200 @@ -0,0 +1,163 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Static utility class for synchronous CFbsBitmap operations. +* +*/ + + +// INCLUDE FILES +#include +#include + +// ============================ STATIC FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::DuplicateBitmapL +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap* IHLBitmapUtil::DuplicateBitmapL( const CFbsBitmap& aBitmap ) + { + CFbsBitmap* bitmap = DuplicateBitmapLC( aBitmap ); + CleanupStack::Pop(); // bitmap + return bitmap; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::DuplicateBitmapLC +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap* IHLBitmapUtil::DuplicateBitmapLC( const CFbsBitmap& aBitmap ) + { + CFbsBitmap* bitmap = new(ELeave) CFbsBitmap; + CleanupStack::PushL( bitmap ); + User::LeaveIfError( bitmap->Duplicate( aBitmap.Handle() ) ); + return bitmap; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::CopyBitmapL +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapL( const CFbsBitmap& aBitmap ) + { + CFbsBitmap* bitmap = CopyBitmapLC( aBitmap ); + CleanupStack::Pop(); // bitmap + return bitmap; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::CopyBitmapLC +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapLC( const CFbsBitmap& aBitmap ) + { + CFbsBitmap* bitmap = new (ELeave) CFbsBitmap(); + CleanupStack::PushL( bitmap ); + if( !aBitmap.Handle() ) + { + return bitmap; + } + + TSize size( aBitmap.SizeInPixels() ); + TDisplayMode displayMode( aBitmap.DisplayMode() ); + + User::LeaveIfError( bitmap->Create( size, displayMode ) ); + + HBufC8* scanLine = HBufC8::NewLC( + aBitmap.ScanLineLength( size.iWidth, displayMode ) ); + TPtr8 scanPtr( scanLine->Des() ); + + TPoint pp; + for ( TInt y( 0 ); y < size.iHeight; ++y ) + { + pp.iY = y; + aBitmap.GetScanLine( scanPtr, pp, size.iWidth, displayMode ); + bitmap->SetScanLine( scanPtr, y ); + } + + CleanupStack::PopAndDestroy(); // scanLine + + return bitmap; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::CopyBitmapL +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapL( const CFbsBitmap& aBitmap, const TRect& aRect ) + { + CFbsBitmap* bitmap = CopyBitmapLC( aBitmap, aRect ); + CleanupStack::Pop(); // bitmap + return bitmap; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::CopyBitmapLC +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapLC( const CFbsBitmap& aBitmap, const TRect& aRect ) + { + CFbsBitmap* bitmap = new (ELeave) CFbsBitmap(); + CleanupStack::PushL( bitmap ); + if( !aBitmap.Handle() ) + { + return bitmap; + } + + TSize clipSize( aRect.Size() ); + TSize sourceSize( aBitmap.SizeInPixels() ); + if( aRect.iTl.iX == aRect.iBr.iX || + aRect.iTl.iY == aRect.iBr.iY || + aRect.iTl.iX < 0 || + aRect.iTl.iX > sourceSize.iWidth || + aRect.iTl.iY < 0 || + aRect.iTl.iY > sourceSize.iHeight ) + { + User::Leave( KErrArgument ); + } + + TDisplayMode dispMode( aBitmap.DisplayMode() ); + User::LeaveIfError( bitmap->Create( clipSize, dispMode ) ); + + HBufC8* scanLine = HBufC8::NewLC( + aBitmap.ScanLineLength( clipSize.iWidth, dispMode ) ); + TPtr8 scanPtr( scanLine->Des() ); + + TPoint pp( aRect.iTl ); + for ( TInt y( 0 ); y < clipSize.iHeight; ++y, ++pp.iY ) + { + aBitmap.GetScanLine( scanPtr, pp, clipSize.iWidth, dispMode ); + bitmap->SetScanLine( scanPtr, y ); + } + + CleanupStack::PopAndDestroy(); // scanLine + return bitmap; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::ScaleBitmap +// ----------------------------------------------------------------------------- +EXPORT_C TInt IHLBitmapUtil::ScaleBitmap( const CFbsBitmap& /*aSrcBitmap*/, + CFbsBitmap& /*aDstBitmap*/, + TUint32 /*aOptions*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// IHLBitmapUtil::ScaleBitmap +// ----------------------------------------------------------------------------- +EXPORT_C TInt IHLBitmapUtil::ScaleBitmap( const CFbsBitmap& /*aSrcBitmap*/, + const TRect& /*aSrcRect*/, + CFbsBitmap& /*aDstBitmap*/, + const TRect& /*aDstRect*/, + TUint32 /*aOptions*/ ) + { + return KErrNotSupported; + } + +// End of File