--- /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 <icl/imageprocessor.h>
+#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__
+
+
+