diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpstutils/inc/cvimpstimageprocessor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstutils/inc/cvimpstimageprocessor.h Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,224 @@ +/* +* Copyright (c) 2008 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: Image processor +* +*/ + + +#ifndef CVIMPSTIMAGEPROCESSOR_H +#define CVIMPSTIMAGEPROCESSOR_H + +#include +#include "mvimpstimageprocessobserver.h" +class CImageDecoder; +class CBitmapScaler; +class CFbsBitmap; +class CImageEncoder; +// CLASS DECLARATION + +/** + * Image processor + * + * @lib vimpstutils.dll + */ +class CVimpstImageProcessor : public CActive + { + public: + /** + * Content processing states + */ + enum TContentProcessState + { + EContentNotProcessed = 0, + EConvertImageDatatoBitmap, + EScaleBitmap, + EConentFromScaledBitmap, + EProcessingComplete + }; + public: // Construction + + /** + * Construction + */ + static CVimpstImageProcessor* NewL( MCAImageProcessObserver* aObserver); + + /** + * Destruction + */ + ~CVimpstImageProcessor(); + + private: // Construction + + /** + * Constructor + */ + CVimpstImageProcessor(MCAImageProcessObserver* aObserver); + + /** + * Constructor + */ + void ConstructL(); + + private: // From CActive + + /** + * @see CActive + */ + void RunL(); + + /** + * @see CActive + */ + void DoCancel(); + + /** + * @see CActive. + */ + TInt RunError( TInt aError ); + + public: + /** + * This is used when the image data is ready + * image data is proceesed and the new content is of the image is given + * by reducing the image data size + * + * @param aImageData : Content of the image file + * @param aMimeType : Mime type of the file from which the content is passed + */ + TInt ProcessFromDataL( const TDesC8& aImageData , const TDesC8& aMimeType); + /** + * This is used when the image data is ready + * image data is proceesed and the new content is of the image is given + * by reducing the image data size + * + * @param aFileName : image file name + * @param aMimeType : Mime type of the file from which the content is passed + */ + void ProcessFromFileL( const TDesC& aFileName , const TDesC8& aMimeType); + /** + * Cancel the image processing operation + */ + void CancelProcessing(); + /** + * Register the observer to give callback + * once the processing is done + * @param aObserver : obeserver + */ + void RegisterObserver( MCAImageProcessObserver* aObserver ); + /** + * Retrieve the processed image + * Ownership of iContent is transferred to caller + * @return processed image + */ + HBufC8* GetContentData(); + /** + * Get Bitmap + * @return bitmap + */ + CFbsBitmap& Bitmap(); + + private: // New helper methods + + /** + * Convert image to bitmap + */ + void ConvertImageToBitmapL(); + /** + * Scale Bit map + */ + void ScaleBitmapL(); + /** + * store scaled bitmap content into iimageencoder + */ + void ContentFromScaledBitmapL(); + /** + * Get new size after decoding. + * Scale to nearest (larger or equal) size with ratio 1:1, 1:2, 1:4 or 1:8 + * directly when decoding. + * + * @param aSize Size of original image + * @param aTargetSize Size of target image + * @param aAnyRatio Set this to ETrue if the decoder is cabable of scaling to any * ratio + * @return New size of decoded image + */ + TSize DecodeSize( const TSize& aSize, const TSize& aTargetSize, + TBool aAnyRatio ); + + /** + * Get new size after scaling. If scale not needed return EFalse + * Scaled size will be 40x30 if width > height or 30x40 if + * height > width. + * + * @param aSize Original size of image + * @param aNewSize New size of scaled image + * @return ETrue if scale needed. + */ + TBool ScaleSize( const TSize& aSize, TSize& aNewSize ); + + /** + * Notify observer for completion and remove message from array + */ + void CompleteRequestL(); + /** + * Reset current operation and remove all pending messages from stack. + * @param aReason reson for reseting + */ + void ResetProcessingL( TInt aReason ); + + /** + * Deletes and cancels all processing units ( decoder, encoder etc ). + */ + void ClearState(); + + + private: // Data + + /// File system access + RFs iFs; + + // Decoder for image. + CImageDecoder* iImageDecoder; + CBitmapScaler* iScaler; + CImageEncoder* iImageEncoder; + /** + * Bitmap. Owns. + */ + CFbsBitmap* iBitmap; + /** + * Target size for bitmap + */ + TSize iTargetSize; + + /** + * Thumbnail size for bitmap + */ + TSize iThumbSize; + /** + * Doesn't Own + */ + HBufC8* iContent; + + /// Owns. + HBufC8* iMimeType; + TContentProcessState iProcessingState; + HBufC* iFilename; + + MCAImageProcessObserver* iObserver; + TInt iScaleSize; + TBool isBitmapReturned; + }; + +#endif // CVIMPSTIMAGEPROCESSOR_H + +// End of File