diff -r 000000000000 -r 4e91876724a2 photosgallery/collectionframework/thumbnailcreator/inc/glxtnimageutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/collectionframework/thumbnailcreator/inc/glxtnimageutility.h Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,148 @@ +/* +* Copyright (c) 2008-2009 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: Utility for creating bitmaps from image files +* +*/ + + + + +/** + * @internal reviewed 30/07/2007 by Simon Brooks + */ + +#ifndef GLXTNIMAGEUTILITY_H +#define GLXTNIMAGEUTILITY_H + +#include +#include // For TDisplayMode + +class MIHLScaler; +class CFbsBitmap; +class CFbsBitGc; +class CImageDecoder; +class RFs; + +/** + * Utility for creating bitmaps from image files + * + * @ingroup glx_thumbnail_creator + */ +NONSHARABLE_CLASS(CGlxtnImageUtility) : public CBase + { +public: + CGlxtnImageUtility(RFs& aFs); + ~CGlxtnImageUtility(); + + void Cancel(); + + /** + * Reduce target size to same aspect ratio as source image. + */ + void AdjustSize(TSize& aTargetSize, const TSize& aSourceSize); + + /** + * Start asynchronous decoding process for a high quality thumbnail. + * @param aStatus Request status for the asynchronous operation. + * @param aFileName Full path of image file. + * @param aTargetSize Size for the image - modified by this function to + * preserve the aspect ratio. + * @param aMode Display mode for the image. + */ + CFbsBitmap* DecodeImageL(TRequestStatus& aStatus, const TDesC& aFileName, + RArray& aTargetSizes, TDisplayMode aMode); + + /** + * Free resources used by decoding. + */ + void FreeDecoder(); + + /** + * Get the original size of the image decoded. + */ + const TSize& OriginalSize() const; + + /** + * Start asynchronous filtering process for a high quality thumbnail. + * @param aStatus Request status for the asynchronous operation. + * @param aSource Source image bitmap. + * @param aFilteredSource Filtered image bitmap. + * @param aTarget Target thumbnail bitmap. + */ + void FilterImageL(TRequestStatus* aStatus, CFbsBitmap* aSource, CFbsBitmap*& aFilteredSource, CFbsBitmap* aTarget); + + /** + * Start asynchronous scaling process for a high quality thumbnail. + * @param aStatus Request status for the asynchronous operation. + * @param aSrcBitmap Source image bitmap. + * @param aSrcRect Source image rectangle. + * @param aDstBitmap Destination thumbnail bitmap. + * @param aDstRect Destination image rectangle. + */ + void ScaleImageL(TRequestStatus& aStatus, CFbsBitmap& aSrcBitmap, const TRect& aSrcRect, CFbsBitmap& aDstBitmap, const TRect& aDstRect); + + /** + * Start asynchronous scaling process for a high quality thumbnail. + * @param aStatus Request status for the asynchronous operation. + * @param aSource Source image bitmap. + * @param aFilteredSource Filtered Source image bitmap. + * @param aTarget Target thumbnail bitmap. + */ + void ScaleImage64kL(TRequestStatus* aStatus, CFbsBitmap* aSource, CFbsBitmap* aFilteredSource, CFbsBitmap* aTarget); + +private: + + void ScaleColor64K( TUint16* aSrc, TInt aSrcStride, TInt aSrcCols, TInt aSrcRows, + TInt aX, TInt aY, TInt aW, TInt aH, + TUint16* aDst, TInt aDstStride, TInt aDstCols, TInt aDstRows ); + + void FilterL( CFbsBitmap* aSource, CFbsBitmap*& aFilteredSource, TInt aFilterPercent ); + + void FIRFiltering( + TUint16* aDst, TUint aDstStridep, TUint aDstCols, TUint aDstRows ); + + void FIRFiltering4( + TUint16* aDst, TUint aDstStridep, TUint aDstCols, TUint aDstRows ); + + void FIRFiltering8( + TUint16* aDst, TUint aDstStridep, TUint aDstCols, TUint aDstRows ); + /* + * Get the orientation of the file + * This API reads the Exif tag in an image and returns the orientation of that Image + */ + TUint16 GetOrientationL(const TDesC& aFileName) ; + /* + * Get the Rotation Angle and Mirroring status of the image so as to set it on the decoder + * This API calculates the rotation angle and the Mirroring status required by the decoder + * @param aOrientation Orientation of the image. + * @param aRotAngle Rotation angle to be set on the image decoder. + * @param aFlipStatus Mirroring status for the decoder if 1 then mirroring should be set. + * Internally it also sets the iOriginalSize to the required size + */ + void GetRotationParameters(TUint16 aOrientation, TInt& aRotAngle, TBool& aFlipStatus) ; +private: + // File server session + RFs& iFs; + // Decoder used to read image from file + CImageDecoder* iDecoder; + // Bitmap scaler + MIHLScaler* iScaler; + /** Size of the image in the file being decoded */ + TSize iOriginalSize; + CFbsBitmap* iImage; + TUint16* iAddress; + CFbsBitGc* iBitGc; + }; + +#endif // GLXTNIMAGEUTILITY_H