diff -r 000000000000 -r 5752a19fdefe imaging/imagingplugins/codecs/BMPCodec/BMPCodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imaging/imagingplugins/codecs/BMPCodec/BMPCodec.h Wed Aug 25 12:29:52 2010 +0300 @@ -0,0 +1,279 @@ +// Copyright (c) 1999-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 BMPCODEC_H +#define BMPCODEC_H + +#include +#include +#include "BMPConvert.h" + +/** +@file +@internalComponent +*/ + +// Read codecs +class CBmpDecoder; +class CBmpReadCodec : public CImageProcessorReadCodec + { +public: + + // From CImageReadCodec + TFrameState ProcessFrameL(TBufPtr8& aSrc); + virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask); + virtual void InitFrameHeader(TFrameInfo& aFrameInfo, CFrameImageData& aFrameData); + virtual TFrameState ProcessFrameHeaderL(TBufPtr8& aData); +protected: + + class TCompDecodeInfo + { + public: + TUint iMask; + TInt iRightShiftValue; + TInt iLeftShiftValue; + }; + enum + { + KRedCompIdx = 0, + KGreenCompIdx = 1, + KBlueCompIdx = 2 + }; + + CBmpReadCodec(const TSize& aBmpSize, const TRgb* aPalette); + ~CBmpReadCodec(); + virtual void DoProcessL() = 0; + virtual void DoNewFrameL(); + void WritePixels(TInt aNumPixels, TBool aUpdatePos = ETrue); +protected: + TSize iOriginalSize; + TSize iFrameSize; + const TRgb* iPalette; // Not owned + const TUint8* iDataPtr; // Not owned + const TUint8* iDataPtrLimit; // Not owned + TInt iBytesExpected; + TInt iBytesProcessed; + TFrameInfo* iFrameInfo; // Not owned + }; + +class CBmp1BppReadCodec : public CBmpReadCodec + { +public: + + static CBmp1BppReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette); + + + //From CBmpReadCodec + virtual void DoProcessL(); + virtual void DoNewFrameL(); +private: + + CBmp1BppReadCodec(const TSize& aBmpSize, const TRgb* aPalette); + + TRgb iEntry0; + TRgb iEntry1; + }; + +class CBmpNoComp4BppReadCodec : public CBmpReadCodec + { +public: + + static CBmpNoComp4BppReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette); + + //From CBmpReadCodec + virtual void DoNewFrameL(); + virtual void DoProcessL(); + +private: + CBmpNoComp4BppReadCodec(const TSize& aBmpSize, const TRgb* aPalette); + }; + +class CBmpRLE4ReadCodec : public CBmpReadCodec + { +public: + + static CBmpRLE4ReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette); + + //From CBmpReadCodec + virtual void DoNewFrameL(); + virtual void DoProcessL(); +private: + CBmpRLE4ReadCodec(const TSize& aBmpSize, const TRgb* aPalette); + + void WriteRun(TUint8 aValue, TInt aNumPixels); + void WriteData(TInt aNumPixels); + }; + +class CBmpNoComp8BppReadCodec : public CBmpReadCodec + { +public: + + static CBmpNoComp8BppReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette); + + //From CBmpReadCodec + virtual void DoNewFrameL(); + virtual void DoProcessL(); + +private: + CBmpNoComp8BppReadCodec(const TSize& aBmpSize, const TRgb* aPalette); + + }; + +class CBmpRLE8ReadCodec : public CBmpReadCodec + { +public: + + static CBmpRLE8ReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette); + + //From CBmpReadCodec + virtual void DoNewFrameL(); + virtual void DoProcessL(); +private: + CBmpRLE8ReadCodec(const TSize& aBmpSize, const TRgb* aPalette); + void WriteRun(TUint8 aValue, TInt aNumPixels); + void WriteData(TInt aNumPixels); + }; + +/** + codec which can handle "bit field" compressed bitmaps +*/ +class CBmpBiRgbReadCodec : public CBmpReadCodec + { +public: + + static CBmpBiRgbReadCodec* NewL(const TSize& aBmpSize, TInt aPixelSize, const TRgb* aPalette); + + //From CBmpReadCodec + virtual void DoProcessL(); + virtual void DoNewFrameL(); + +protected: + enum + { + KMaxComps = KBlueCompIdx + 1 // RGB + }; + + CBmpBiRgbReadCodec(const TSize& aBmpSize, TInt aPixelSize, const TRgb* aPalette); + + void ConstructL(); + + const TInt iPixelSize; // pixel size in bytes + + TInt iTotalByteWidth; // line byte width with possible padding + TInt iPixelByteWidth; // line byte width without possible padding + TInt iPaddingByteWidth; // padding value + TInt iBytePos; // current byte position + TCompDecodeInfo iCompInfo[KMaxComps]; // color comps "decompression" parameters + }; + +class CBmp24BppReadCodec : public CBmpReadCodec + { +public: + + static CBmp24BppReadCodec* NewL(const TSize& aBmpSize); + + //From CBmpReadCodec + virtual void DoProcessL(); + virtual void DoNewFrameL(); +private: + CBmp24BppReadCodec(const TSize& aBmpSize); + + TInt iTotalByteWidth; + TInt iPixelByteWidth; + TInt iPaddingByteWidth; + TInt iBytePos; + }; + +class CBmp32BppReadCodec : public CBmpReadCodec + { +public: + + static CBmp32BppReadCodec* NewL(const TSize& aBmpSize); + + //From CBmpReadCodec + virtual void DoProcessL(); + virtual void DoNewFrameL(); +private: + CBmp32BppReadCodec(const TSize& aBmpSize); + + TInt iTotalByteWidth; + TInt iPixelByteWidth; + TInt iPaddingByteWidth; + TInt iBytePos; + }; + +// Write codecs +class CBmpWriteCodec : public CImageWriteCodec + { +public: + // from CImageWriteCodec + virtual void InitFrameL(TBufPtr8& aDst, const CFbsBitmap& aSource); +protected: + + virtual TFrameState ProcessFrameL(TBufPtr8& aDst); + virtual void DoProcessL(const CFbsBitmap& aFrame) = 0; + virtual TInt PaddingBytes() = 0; +protected: + TRect iSourceRect; + TPoint iPos; + TUint8* iDestPtr; + TUint8* iDestPtrLimit; + TInt iPaddingBytes; + TInt iBytesToWrite; + }; + +class CBmp1BppWriteCodec : public CBmpWriteCodec + { +public: + + static CBmp1BppWriteCodec* NewL(void); + + //from CBmpWriteCodec + virtual void DoProcessL(const CFbsBitmap& aFrame); + virtual TInt PaddingBytes(); + }; + +class CBmp4BppWriteCodec : public CBmpWriteCodec + { +public: + static CBmp4BppWriteCodec* NewL(void); + + //from CBmpWriteCodec + virtual void DoProcessL(const CFbsBitmap& aFrame); + virtual TInt PaddingBytes(); + }; + +class CBmp8BppWriteCodec : public CBmpWriteCodec + { +public: + static CBmp8BppWriteCodec* NewL(void); + + //from CBmpWriteCodec + virtual void DoProcessL(const CFbsBitmap& aFrame); + virtual TInt PaddingBytes(); + }; + +class CBmp24BppWriteCodec : public CBmpWriteCodec + { +public: + static CBmp24BppWriteCodec* NewL(void); + + //from CBmpWriteCodec + virtual void DoProcessL(const CFbsBitmap& aFrame); + virtual TInt PaddingBytes(); + }; + +#endif // BMPCODEC_H +