diff -r 000000000000 -r 5752a19fdefe imaging/imagingfws/src/ImageProcessorPriv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imaging/imagingfws/src/ImageProcessorPriv.h Wed Aug 25 12:29:52 2010 +0300 @@ -0,0 +1,375 @@ +// Copyright (c) 1998-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: +// + +#ifndef ___IMAGEPROCESSORPRIV_H__ +#define ___IMAGEPROCESSORPRIV_H__ + +#include +#include "fwextconstants.h" + +//The size of the index lookup table +const TInt KIndexLookupSize = 256; + +class CColorImageProcessor; // declared here +/** + * @internalComponent + * + * @see CImageProcessor. + * + */ +NONSHARABLE_CLASS( CColorImageProcessor ): public CImageProcessorExtension + { +public: + virtual ~CColorImageProcessor(); + // From CImageProcessor (Default implementations) + TBool SetPixelRun(TRgb aColor,TInt aCount); + TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength); + TBool SetMonoPixel(TInt aGray256); + TBool SetMonoPixelRun(TInt aGray256,TInt aCount); + TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength); + TBool SetMonoPixelBlock(TUint32* aGray256Buffer); +protected: + // New - to facilitate default implementation of SetMonoPixelBlock() + void CreateBlockBufferL(TInt aBlockArea); +protected: + // Used by default implementation of SetMonoPixelBlock() + TRgb* iBlockBuffer; + TInt iBlockArea; + }; + +class CMonochromeImageProcessor; // declared here +/** + * @internalComponent + * + * @see CImageProcessor. + * + */ +NONSHARABLE_CLASS( CMonochromeImageProcessor ): public CImageProcessorExtension + { +public: + virtual ~CMonochromeImageProcessor(); + // From CImageProcessor (Default implementations) + TBool SetPixel(TRgb aColor); + TBool SetPixelRun(TRgb aColor,TInt aCount); + TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength); + TBool SetPixelBlock(TRgb* aColorBuffer); + TBool SetMonoPixelRun(TInt aGray256,TInt aCount); + TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength); +protected: + // New - to facilitate default implementation of SetPixelBlock() + void CreateBlockBufferL(TInt aBlockArea); +protected: + // Used by default implementation of SetPixelBlock() + TUint32* iBlockBuffer; + TInt iBlockArea; + }; + +class CPixelWriter; // declared here +/** + * @internalComponent + * + * @see CColorImageProcessor. + * + */ +NONSHARABLE_CLASS( CPixelWriter ): public CColorImageProcessor + { +public: + static CPixelWriter* NewL(); + virtual ~CPixelWriter(); + // From CImageProcessor + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect); + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize); + void SetYPosIncrement(TInt aYInc); + void SetLineRepeat(TInt aLineRepeat); + void SetPixelPadding(TInt aNumberOfPixels); + TBool SetPixel(TRgb aColor); + TBool SetPixelRun(TRgb aColor,TInt aCount); + TBool SetPixels(TRgb* aColorBuffer, TInt aBufferLength); + TBool SetPixelBlock(TRgb* aColorBuffer); + TBool SetPos(const TPoint& aPosition); + TBool FlushPixels(); +protected: + // New + CPixelWriter(); + virtual void Reset(); + virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize); + virtual void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount); //Used by FlushPixels to convert buffered 'SetPixel's + virtual void SetPixelBlockIndex(TRgb* aColorBuffer); //Used by SetPixelBlock + virtual TBool NewLine(); +protected: + TInt iYInc; + TInt iLineRepeat; + TInt iPixelPadding; + TInt iPixelsToSkip; + TPoint iPos; + TRect iImageRegion; + TSize iBlockSize; + TInt iBlockArea; + TImageBitmapUtil iUtil; + TColorConvertor* iColorConv; + TRgb* iRgbBuffer; + TRgb* iRgbBufferPtr; + TRgb* iRgbBufferPtrLimit; + TUint32* iIndexBuffer; + TUint32* iIndexBufferPtrLimit; + TDisplayMode iDisplayMode; + TBool iDrawBottomUp; + }; + +class CMonochromePixelWriter; // declared here +/** + * @internalComponent + * + * @see CMonochromeImageProcessor. + * + */ +NONSHARABLE_CLASS( CMonochromePixelWriter ): public CMonochromeImageProcessor + { +public: + static CMonochromePixelWriter* NewL(); + virtual ~CMonochromePixelWriter(); + // From CImageProcessor + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect); + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize); + void SetYPosIncrement(TInt aYInc); + void SetLineRepeat(TInt aLineRepeat); + void SetPixelPadding(TInt aNumberOfPixels); + TBool SetMonoPixel(TInt aGray256); + TBool SetMonoPixelRun(TInt aGray256,TInt aCount); + TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength); + TBool SetMonoPixelBlock(TUint32* aGray256Buffer); + TBool SetPos(const TPoint& aPosition); + TBool FlushPixels(); +protected: + // New + CMonochromePixelWriter(); + virtual void Reset(); + virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize); + virtual void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount); //Used by FlushPixels to convert buffered 'SetPixel's + virtual void SetPixelBlockIndex(TUint32* aGray256Buffer); //Used by SetPixelBlock + virtual TBool NewLine(); +protected: + TInt iYInc; + TInt iLineRepeat; + TInt iPixelPadding; + TInt iPixelsToSkip; + TPoint iPos; + TRect iImageRegion; + TSize iBlockSize; + TInt iBlockArea; + TImageBitmapUtil iUtil; + TColorConvertor* iColorConv; + TUint32* iGray256Buffer; + TUint32* iGray256BufferPtr; + TUint32* iGray256BufferPtrLimit; + TUint32* iIndexBuffer; + TUint32* iIndexBufferPtrLimit; + TUint32 iIndexLookup[KIndexLookupSize]; + TBool iDrawBottomUp; + }; + +class CErrorDiffuser; // declared here +/** + * @internalComponent + * + * @see CPixelWriter. + * + */ +NONSHARABLE_CLASS( CErrorDiffuser ): public CPixelWriter + { +public: + IMPORT_C static CErrorDiffuser* NewL(); + virtual ~CErrorDiffuser(); +protected: + CErrorDiffuser(); +private: + class TColorError + { + public: + inline void AdjustColor(TRgb& aColor) const; + public: + inline TColorError(); + inline TColorError(TInt aRedError,TInt aGreenError,TInt aBlueError); + inline void SetError(TRgb aIdealColor,TRgb aActualColor); + inline TColorError operator+(const TColorError& aColorError) const; + inline TColorError operator-(const TColorError& aColorError) const; + inline TColorError operator<<(TInt aShift) const; + inline TColorError& operator+=(const TColorError& aColorError); + public: + TInt iRedError; + TInt iGreenError; + TInt iBlueError; + }; +private: + // From CPixelWriter + void Reset(); + void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize); + void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount); + void SetPixelBlockIndex(TRgb* aColorBuffer); + void SetPixelBufferColor64KIndex(TRgb* aColorBuffer,TInt aCount); + // optimized version of ClampColorComponent + inline TInt ClipColorComponent(TInt value); + +private: + TColorError* iScanlineErrorBuffer; + TColorError* iEdgeErrorBuffer; + TColorError iNextError; + TPoint iLastPos; + // for fast 64K mode + TInt8* iRedErrorLookupTable; + TInt8* iGreenErrorLookupTable; + TInt iNextRedError; + TInt iNextGreenError; + TInt iNextBlueError; + }; + +class CMonochromeErrorDiffuser; // declared here +/** + * @internalComponent + * + * @see CMonochromePixelWriter. + * + */ +NONSHARABLE_CLASS( CMonochromeErrorDiffuser ): public CMonochromePixelWriter + { +public: + static CMonochromeErrorDiffuser* NewL(); + virtual ~CMonochromeErrorDiffuser(); +protected: + CMonochromeErrorDiffuser(); +private: + // From CMonochromePixelWriter + void Reset(); + void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize); + void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount); + void SetPixelBlockIndex(TUint32* aGray256Buffer); +private: + TInt* iScanlineErrorBuffer; + TInt* iEdgeErrorBuffer; + TInt iNextError; + TPoint iLastPos; + }; + +class CThumbnailProcessor; // declared here +/** + * @internalComponent + * + * @see CColorImageProcessor. + * + */ +NONSHARABLE_CLASS( CThumbnailProcessor ): public CColorImageProcessor + { +public: + static CThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor); + virtual ~CThumbnailProcessor(); + // From CImageProcessor + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect); + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize); + void SetYPosIncrement(TInt aYInc); + void SetLineRepeat(TInt aLineRepeat); + void SetPixelPadding(TInt aNumberOfPixels); + TBool SetPixel(TRgb aColor); + TBool SetPixelBlock(TRgb* aColorBuffer); + TBool SetPos(const TPoint& aPosition); + TBool FlushPixels(); +private: + // New + CThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor); + void PrepareCommonL(const TRect& aImageRect); + void DoFlushPixels(); + TBool NewLine(); +private: + class TColorSum + { + public: + TInt iRed; + TInt iGreen; + TInt iBlue; + TInt iCount; + }; +private: + CImageProcessorExtension* iImageProc; + TPoint iPos; + TBool iPositionChanged; + TInt iPixelPadding; + TInt iEndOfLineX; + TInt iYInc; + TRect iImageRegion; + TSize iOriginalBlockSize; + TInt iReductionFactor; + TRect iReducedImageRegion; + TSize iReducedBlockSize; + TRgb* iReducedPixelBuffer; + TColorSum* iReducedSumBuffer; + TBool iDrawBottomUp; + }; + +class CMonochromeThumbnailProcessor; // declared here +/** + * @internalComponent + * + * @see CMonochromeImageProcessor. + * + */ +NONSHARABLE_CLASS( CMonochromeThumbnailProcessor ): public CMonochromeImageProcessor + { +public: + static CMonochromeThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor); + virtual ~CMonochromeThumbnailProcessor(); + // From CImageProcessor + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect); + void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize); + void SetYPosIncrement(TInt aYInc); + void SetLineRepeat(TInt aLineRepeat); + void SetPixelPadding(TInt aNumberOfPixels); + TBool SetMonoPixel(TInt aGray256); + TBool SetMonoPixelRun(TInt aGray256,TInt aCount); + TBool SetMonoPixelBlock(TUint32* aGray256Buffer); + TBool SetPos(const TPoint& aPosition); + TBool FlushPixels(); +private: + // New + CMonochromeThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor); + void PrepareCommonL(const TRect& aImageRect); + void DoFlushPixels(); + TBool NewLine(); +private: + class TMonochromeSum + { + public: + TInt iLevel; + TInt iCount; + }; +private: + CImageProcessorExtension* iImageProc; + TPoint iPos; + TBool iPositionChanged; + TInt iPixelPadding; + TInt iEndOfLineX; + TInt iYInc; + TRect iImageRegion; + TSize iOriginalBlockSize; + TInt iReductionFactor; + TRect iReducedImageRegion; + TSize iReducedBlockSize; + TUint32* iReducedPixelBuffer; + TMonochromeSum* iReducedSumBuffer; + TBool iDrawBottomUp; + }; + +#endif // ___IMAGEPROCESSORPRIV_H__ + + +