www.pudn.com > C++_Flash.rar > SWFBitmap.cpp


// SWFBitmap.cpp: implementation of the CSWFBitmap class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "SWFBitmap.h" 
 
 
CSWFBitmap::CSWFBitmap(USHORT nID, UCHAR* filename) 
{ 
	// Init members 
	m_ObjectType = SWF_OBJECT_TYPE_BITMAP; 
	m_SWFStream = NULL; 
	m_SWFStreamLength = 0; 
	m_ID = nID; 
	m_DefineBits.Header.TagCodeAndLength = (21 << 6) | 0x003F; 
	m_DefineBits.CharacterID = nID; 
 
	FILE* image = fopen((char*)filename, "rb"); 
	if (image != NULL) 
	{ 
		// Calculate DefineBitsJPEG2 tag size 
		int fileLength = filelength(fileno(image)); 
		UCHAR* pBuffer = new UCHAR[fileLength]; 
		fread(pBuffer, 1, fileLength, image); 
 
		m_DefineBits.Header.Length = fileLength + 8; 
		m_SWFStreamLength = sizeof(SWF_DEFINE_BITS_JPEG2_TAG) + (m_DefineBits.Header.Length-2); 
 
		m_SWFStream = (UCHAR*)malloc(m_SWFStreamLength*sizeof(UCHAR)); 
		memset(m_SWFStream, 0, m_SWFStreamLength); 
 
		// Write header and data 
		UCHAR JPEGEndFlag[2] = {0xFF, 0xD9}; 
		UCHAR JPEGStartFlag[2] = {0xFF, 0xD8}; 
		memcpy(m_SWFStream, &m_DefineBits, sizeof(SWF_DEFINE_BITS_JPEG2_TAG)); 
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG), &JPEGEndFlag, 2); 
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG)+2, &JPEGStartFlag, 2); 
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG)+4, pBuffer, fileLength); 
		memcpy(m_SWFStream+sizeof(SWF_DEFINE_BITS_JPEG2_TAG)+4+fileLength, &JPEGEndFlag, 2); 
		fclose(image); 
		delete pBuffer; 
	} 
} 
 
CSWFBitmap::~CSWFBitmap() 
{ 
	if (m_SWFStream != NULL) 
	{ 
		delete m_SWFStream; 
		m_SWFStream = NULL; 
	} 
} 
 
UCHAR* CSWFBitmap::BuildSWFStream() 
{ 
	return m_SWFStream; 
} 
 
int CSWFBitmap::GetSWFStreamLength() 
{ 
	return m_SWFStreamLength; 
}