sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #ifndef __BITMAPCOMPR_H__ sl@0: #define __BITMAPCOMPR_H__ sl@0: sl@0: //Forward declaration sl@0: class TLineScanningPosition; sl@0: //Global function used by 12, 16, 24 bpp scan line decompression methods sl@0: void AdjustLineScanningPosition(TLineScanningPosition& aLineScanPos, sl@0: const TUint32* aBase, sl@0: TInt aBitmapWidth, sl@0: TInt aStartPos, sl@0: TInt aCompressedDataBytes); sl@0: sl@0: /** sl@0: Possible values for the template argument of TScanLineDecompressor class. sl@0: @internalComponent sl@0: */ sl@0: typedef enum sl@0: { sl@0: E2bpp = 2, sl@0: E3bpp = 3, sl@0: E4bpp = 4 sl@0: } TScanLineDecompressorType; sl@0: sl@0: /** sl@0: This functor class is used for bitmap scanline decompression. sl@0: Possible values for the template argument of TScanLineDecompressor class are enumerated sl@0: in TScanLineDecompressorType enum. sl@0: Note: "BPP" means "bytes per pixel for source buffer". sl@0: Note: "BPP_DEST" means "bytes per pixel for destination buffer". sl@0: Note: Template class design was preffered to base-derived class design (with virtual sl@0: CopyPixel() method), because performance is more important than code size for bitmap sl@0: scanline decompression. sl@0: @internalComponent sl@0: */ sl@0: template sl@0: class TScanLineDecompressor sl@0: { sl@0: public: sl@0: TScanLineDecompressor(const TUint32* aBase, sl@0: TInt aComprDataBytes, sl@0: TBool aCanAdjustLineScanPos); sl@0: void operator()(TUint8* aDestBuffer, const TPoint& aPixel, sl@0: TLineScanningPosition& aLineScanPos, TInt aByteWidth, TInt aDestByteWidth, TInt aLength) const; sl@0: sl@0: private: sl@0: TInt CalcStartPos(const TPoint& aPixel, TInt aByteWidth) const; sl@0: TInt CalcDestStartPos(const TPoint& aPixel, TInt aByteWidth) const; sl@0: TInt CalcEndPos(TInt aLength, const TPoint& aPixel, TInt aByteWidth) const; sl@0: TUint8* CalcDestPtr(const TUint8* aDestBuffer, const TPoint& aPixel) const; sl@0: TUint8* CalcDestPtrLimit(const TUint8* aDestPtr, const TPoint& aPixel, TInt aByteWidth, sl@0: TInt aLength, TInt aStartPos) const; sl@0: TInt CalcAvailDestSpace(const TUint8* aDestPtr, const TUint8* aDestPtrLimit) const; sl@0: TUint8* AdjustLineScanningPosition(TLineScanningPosition& aLineScanPos, TInt aByteWidth, sl@0: TInt aStartPos) const; sl@0: TUint8* CopyPixel(TUint8* aDestPtr, const TUint8* aSrcPtr, TInt aCount) const; sl@0: TUint8* CopyBlockPixel(TUint8* aDestPtr, const TUint8* aSrcPtr, TInt aCount) const; sl@0: sl@0: TScanLineDecompressor(const TScanLineDecompressor&);//prevent default copy constructor sl@0: TScanLineDecompressor& operator=(const TScanLineDecompressor&);//prevent default "=" operator sl@0: sl@0: private: sl@0: const TUint32* iBase; sl@0: const TInt iComprDataBytes; sl@0: const TBool iCanAdjustLineScanPos; sl@0: sl@0: }; sl@0: sl@0: #include "BitmapCompr.inl" sl@0: sl@0: #endif//__BITMAPCOMPR_H__ sl@0: