imagehandlinglib/Src/IHLBitmapUtil.cpp
changeset 0 2014ca87e772
equal deleted inserted replaced
-1:000000000000 0:2014ca87e772
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Static utility class for synchronous CFbsBitmap operations.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <IHLBitmapUtil.h>
       
    21 #include <fbs.h>
       
    22 
       
    23 // ============================ STATIC FUNCTIONS ===============================
       
    24 // -----------------------------------------------------------------------------
       
    25 // IHLBitmapUtil::DuplicateBitmapL
       
    26 // -----------------------------------------------------------------------------
       
    27 EXPORT_C CFbsBitmap* IHLBitmapUtil::DuplicateBitmapL( const CFbsBitmap& aBitmap )
       
    28 	{
       
    29 	CFbsBitmap* bitmap = DuplicateBitmapLC( aBitmap );
       
    30 	CleanupStack::Pop(); // bitmap
       
    31 	return bitmap;
       
    32 	}
       
    33 
       
    34 // -----------------------------------------------------------------------------
       
    35 // IHLBitmapUtil::DuplicateBitmapLC
       
    36 // -----------------------------------------------------------------------------
       
    37 EXPORT_C CFbsBitmap* IHLBitmapUtil::DuplicateBitmapLC( const CFbsBitmap& aBitmap )
       
    38 	{
       
    39 	CFbsBitmap* bitmap = new(ELeave) CFbsBitmap;
       
    40 	CleanupStack::PushL( bitmap );
       
    41 	User::LeaveIfError( bitmap->Duplicate( aBitmap.Handle() ) );
       
    42 	return bitmap;
       
    43 	}
       
    44 
       
    45 // -----------------------------------------------------------------------------
       
    46 // IHLBitmapUtil::CopyBitmapL
       
    47 // -----------------------------------------------------------------------------
       
    48 EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapL( const CFbsBitmap& aBitmap )
       
    49 	{
       
    50 	CFbsBitmap* bitmap = CopyBitmapLC( aBitmap );
       
    51 	CleanupStack::Pop(); // bitmap
       
    52 	return bitmap;
       
    53 	}
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // IHLBitmapUtil::CopyBitmapLC
       
    57 // -----------------------------------------------------------------------------
       
    58 EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapLC( const CFbsBitmap& aBitmap )
       
    59 	{
       
    60     CFbsBitmap* bitmap = new (ELeave) CFbsBitmap();
       
    61     CleanupStack::PushL( bitmap );
       
    62 	if( !aBitmap.Handle() )
       
    63 		{
       
    64 		return bitmap;
       
    65 		}
       
    66 
       
    67 	TSize size( aBitmap.SizeInPixels() );
       
    68 	TDisplayMode displayMode( aBitmap.DisplayMode() );
       
    69 
       
    70     User::LeaveIfError( bitmap->Create( size, displayMode ) );
       
    71 
       
    72     HBufC8* scanLine = HBufC8::NewLC(
       
    73         aBitmap.ScanLineLength( size.iWidth, displayMode ) );
       
    74     TPtr8 scanPtr( scanLine->Des() );
       
    75 
       
    76     TPoint pp;
       
    77     for ( TInt y( 0 ); y < size.iHeight; ++y )
       
    78         {
       
    79 		pp.iY = y;
       
    80         aBitmap.GetScanLine( scanPtr, pp, size.iWidth, displayMode );
       
    81         bitmap->SetScanLine( scanPtr, y );
       
    82         }
       
    83 
       
    84     CleanupStack::PopAndDestroy(); // scanLine
       
    85 
       
    86 	return bitmap;
       
    87 	}
       
    88 
       
    89 // -----------------------------------------------------------------------------
       
    90 // IHLBitmapUtil::CopyBitmapL
       
    91 // -----------------------------------------------------------------------------
       
    92 EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapL( const CFbsBitmap& aBitmap, const TRect& aRect )
       
    93 	{
       
    94 	CFbsBitmap* bitmap = CopyBitmapLC( aBitmap, aRect );
       
    95 	CleanupStack::Pop(); // bitmap
       
    96 	return bitmap;
       
    97 	}
       
    98 
       
    99 // -----------------------------------------------------------------------------
       
   100 // IHLBitmapUtil::CopyBitmapLC
       
   101 // -----------------------------------------------------------------------------
       
   102 EXPORT_C CFbsBitmap* IHLBitmapUtil::CopyBitmapLC( const CFbsBitmap& aBitmap, const TRect& aRect )
       
   103 	{
       
   104     CFbsBitmap* bitmap = new (ELeave) CFbsBitmap();
       
   105     CleanupStack::PushL( bitmap );
       
   106 	if( !aBitmap.Handle() )
       
   107 		{
       
   108 		return bitmap;
       
   109 		}
       
   110 
       
   111 	TSize clipSize( aRect.Size() );
       
   112 	TSize sourceSize( aBitmap.SizeInPixels() );
       
   113 	if( aRect.iTl.iX == aRect.iBr.iX ||
       
   114 		aRect.iTl.iY == aRect.iBr.iY ||
       
   115 	    aRect.iTl.iX < 0 ||
       
   116 	    aRect.iTl.iX > sourceSize.iWidth ||
       
   117 	    aRect.iTl.iY < 0 ||
       
   118 	    aRect.iTl.iY > sourceSize.iHeight )
       
   119 		{
       
   120 		User::Leave( KErrArgument );
       
   121 		}
       
   122 	
       
   123 	TDisplayMode dispMode( aBitmap.DisplayMode() );
       
   124     User::LeaveIfError( bitmap->Create( clipSize, dispMode ) );
       
   125 
       
   126     HBufC8* scanLine = HBufC8::NewLC(
       
   127         aBitmap.ScanLineLength( clipSize.iWidth, dispMode ) );
       
   128     TPtr8 scanPtr( scanLine->Des() );
       
   129 
       
   130     TPoint pp( aRect.iTl );
       
   131     for ( TInt y( 0 ); y < clipSize.iHeight; ++y, ++pp.iY )
       
   132         {
       
   133         aBitmap.GetScanLine( scanPtr, pp, clipSize.iWidth, dispMode );
       
   134         bitmap->SetScanLine( scanPtr, y );
       
   135         }
       
   136 
       
   137     CleanupStack::PopAndDestroy(); // scanLine
       
   138 	return bitmap;
       
   139 	}
       
   140 
       
   141 // -----------------------------------------------------------------------------
       
   142 // IHLBitmapUtil::ScaleBitmap
       
   143 // -----------------------------------------------------------------------------
       
   144 EXPORT_C TInt IHLBitmapUtil::ScaleBitmap( const CFbsBitmap& /*aSrcBitmap*/,
       
   145 										  CFbsBitmap& /*aDstBitmap*/,
       
   146 										  TUint32 /*aOptions*/ )
       
   147 	{
       
   148 	return KErrNotSupported;
       
   149 	}
       
   150 
       
   151 // -----------------------------------------------------------------------------
       
   152 // IHLBitmapUtil::ScaleBitmap
       
   153 // -----------------------------------------------------------------------------
       
   154 EXPORT_C TInt IHLBitmapUtil::ScaleBitmap( const CFbsBitmap& /*aSrcBitmap*/,
       
   155 										  const TRect& /*aSrcRect*/,
       
   156 										  CFbsBitmap& /*aDstBitmap*/,
       
   157 										  const TRect& /*aDstRect*/,
       
   158 										  TUint32 /*aOptions*/ )
       
   159 	{
       
   160 	return KErrNotSupported;
       
   161 	}
       
   162 
       
   163 //  End of File