imagehandlinglib/Src/IHLBitmapUtil.cpp
changeset 0 2014ca87e772
--- /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 <IHLBitmapUtil.h>
+#include <fbs.h>
+
+// ============================ 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