imaging/imagingplugins/codecs/BMPCodec/BMPCodec.h
changeset 0 5752a19fdefe
--- /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 <icl/imageprocessor.h>
+#include <icl/imagecodec.h>
+#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
+