www.pudn.com > FlashFormat.rar > FDTBitmaps.h


// Copyright © 1999 Middlesoft, Inc. All rights reserved.
// First Created By Lee Thomason.
// First Created On 09/08/1999.
// Last Modified On 11/09/1999.

/****************************************************************************************

				File Summary: FDTBitmaps.h

	This header-file contains the declarations of all low-level bitmap-related classes, 
	which are all derived from class FDT:
  
		class FDTDefineBits;
		class FDTDefineBitsJPEG2;
		class FDTDefineBitsJPEG3;
		class FDTDefineBitsLosslessBase;
		class FDTDefineBitsLossless : public FDTDefineBitsLosslessBase;
		class FDTDefineBitsLossless2 : public FDTDefineBitsLosslessBase;
		class FDTJPEGTables;

****************************************************************************************/

#ifndef _F_DEFINE_BITMAPS_H_ 
#define _F_DEFINE_BITMAPS_H_ 

#include "FDT.h"

struct FRGB;
struct FRGBA;

// A flash object which defines a jpeg bitmap image (flash 1.0)

class FDTDefineBits : public FDT {

public:
	
	// constructed with image size and a pointer to the actual jpeg stream
	FDTDefineBits(U32 _size, U8* _image);
	U16 ID(void);
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U16 characterID;
	U32 size;
	U8* image;

};


// A flash object which defines a jpeg bitmap image (flash 2.0)
// Differs from FDTDefineBits in that the encoding data and image data are contained in the object separately, but this DefineBitsJPEG2 doesn't really do this (as does not flash)...
// An empty stream is writen where encoding data should normally be encountered and all the JPEG and encoding data is written within the JPEG stream

class FDTDefineBitsJPEG2 : public FDT {

public:
	FDTDefineBitsJPEG2(U8* _JPEGStream, U32 _JPEGSize);
	U16 ID(void);
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U16 characterID;
	U32 JPEGSize;
	U8* JPEGStream;

};


// A flash object which defines a jpeg bitmap image (flash 3.0)
// Differs from FDTDefineBitsJPEG2 in that Alpha transparency data is contained in this object

class FDTDefineBitsJPEG3 : public FDT{

public:
	FDTDefineBitsJPEG3(U8* _JPEGStream, U32 _JPEGSize,
					U8* _alphaStream, U32 _alphaSize);
	U16 ID(void);
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U16 characterID;
	U32 alphaSize;
	U32 JPEGSize;
	U8* JPEGStream;
	U8* alphaStream;

};


// Base class for FDTDefineBitsLossless (below) and FDTDefineBitsLossless2.
// Please see those two classes for descripion of parameters.
// Note this class can be constructed - it will write the correct tag when
// WriteToSWFStream is called. Or one of the child classes can be used.

class FDTDefineBitsLosslessBase : public FDT {

public:
	enum { 
		bm1Bit,		// 2 color
		bm2Bit,		// 4 color
		bm4Bit,		// 16 color
		bm8Bit,		// 256 color
		bm16Bit,	// high
		bm32Bit		// true
	};

	virtual U16 ID()		{ return characterID; }

	FDTDefineBitsLosslessBase(	U8 _format,
								U16 _width,
								U16 _height, 
								int _colorTableCount,
								const void* _colorTableData,
								const void* _imageData,
								bool alpha
							 );
	virtual ~FDTDefineBitsLosslessBase();	
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U16 characterID;
	U8 format;
	U16 width;
	U16 height;
	int colorTableCount;
	bool alpha;
	unsigned long compressedSize;		// a count of how many bytes are in the compressed buffer
	unsigned char* compressed;		// pointer to the compressed data
};

// Defines a loss-less bitmap object, like a GIF, BMP, or PCT.
// This version does not accept alpha channel data - FDTDefineBitsLossless2 does.
// Accepts raw bitmap data and compresses it.

class FDTDefineBitsLossless : public FDTDefineBitsLosslessBase {

public:
	FDTDefineBitsLossless(	U8 _format,					// format, from FDTDefineBitsLosslessBase.
							U16 _width,					// size of the image
							U16 _height, 
							int _colorTableCount,		// how many entries in the color table - consistent 
														// with format. May be 0.
							const FRGB* _colorTableData,		// Null if no color cable. RGB data
							const void* _imageData			// Pointer to the image. (byte aligned.)
						 );
};



// Defines a loss-less bitmap object, like a GIF, BMP, or PCT.
// This version requires alpha channel data. Note the color table is RGBA.
// Accepts raw bitmap data and compresses it.

class FDTDefineBitsLossless2 : public FDTDefineBitsLosslessBase {

public:
	FDTDefineBitsLossless2(	U8 _format,					// format, from FDTDefineBitsLosslessBase.
							U16 _width,					// size of the image
							U16 _height, 
							int _colorTableCount,		// how many entries in the color table - consistent 
														// with format. May be 0.
							const FRGBA* _colorTableData,		// Null if no color cable. RGB data
							const void* _imageData			// Pointer to the image. (byte aligned.)
						  );
};


//the JPEGTable structure (contains the encoding scheme for all JPEGs defined using DefineBits

class FDTJPEGTables : public FDT{

public:

	FDTJPEGTables(U32 encodingDataSize, U8* encodingData);
	virtual void WriteToSWFStream(FSWFStream *_SWFStream);


private:

	U32 encodingDataSize;
	U8* encodingData;


};
#endif