📄 atflashimporter.cpp
字号:
void AtFlashImportHandler::Import(FlashTagDefineShape3 *data)
{
#if 0
std::cout << "\n<FlashTagDefineShape3>\n";
std::cout << "ID:" << data.GetID() << "\n";
PrintRect(data.GetShapes().GetBounds());
PrintRect(data.rimport);
#endif
// Update the shape's id into the character idspace
FlashIDFactory idFactory;
UWORD newid = idFactory.GetCharacterID();
mIdMap[ data->GetID() ] = newid;
data->SetID( newid );
mFlash->GetShapeList().push_back( data );
}
void AtFlashImportHandler::Import(FlashTagFreeCharacter *data)
{
#if 0
std::cout << "\n<FreeCharacter>\n";
std::cout << "ID:" << data.GetID() << "\n";
#endif
delete data;
}
void AtFlashImportHandler::Import(FlashTagDefineSound *data)
{
#if 0
std::cout << "\n<FlashTagDefineSound>\n";
std::cout << "ID:" << data.GetID() << "\n";
std::cout << "Flags:" << (int)data.GetFlags() << "\n";
std::cout << "Sample Count:" << data.GetSampleCount() << "\n";
std::cout << "Sample Length:" << data.GetSampleLength() << "\n";
#endif
delete data;
}
void AtFlashImportHandler::Import(FlashTagDefineSoundMP3 *data)
{
#if 0
std::cout << "\n<FlashTagDefineSoundMP3>\n";
std::cout << "ID:" << data.GetID() << "\n";
std::cout << "Flags:" << (int)data.GetFlags() << "\n";
std::cout << "Sample Count:" << data.GetSampleCount() << "\n";
std::cout << "Sample Length:" << data.GetSampleLength() << "\n";
#endif
delete data;
}
void AtFlashImportHandler::Import(FlashTagStartSound *data)
{
#if 0
std::cout << "\n<FlashTagStartSound>\n";
std::cout << "ID:" << data.GetID() << "\n";
std::cout << "Sound Info:\n";
std::cout << " Flags: " << (int)data.GetSoundInfo().GetFlags() << "\n";
if(data.GetSoundInfo().GetFlags() & FSI_HAS_IN != 0) std::cout << " In Point: " << data.GetSoundInfo().GetInPoint() << "\n";
if(data.GetSoundInfo().GetFlags() & FSI_HAS_OUT != 0) std::cout << " Out Point: " << data.GetSoundInfo().GetOutPoint() << "\n";
if(data.GetSoundInfo().GetFlags() & FSI_HAS_LOOP != 0) std::cout << " Loop Count: " << data.GetSoundInfo().GetLoopCount() << "\n";
if(data.GetSoundInfo().GetFlags() & FSI_HAS_ENVELOPE != 0) std::cout << " Sound Envelopes Found\n";
#endif
delete data;
}
void AtFlashImportHandler::Import(FlashTagSoundStreamHead *data)
{
#if 0
std::cout << "\n<FlashTagSoundStreamHead>\n";
std::cout << "Play Rate: " << (int)data.GetPlayRate() << "\n";
std::cout << "Play 16 Bit: " << data.GetPlay16bit() << "\n";
std::cout << "Play Stereo: " << data.GetPlayStereo() << "\n";
std::cout << "Compression: " << (int)data.GetCompression() << "\n";
std::cout << "Stream Rate: " << (int)data.GetStreamRate() << "\n";
std::cout << "Stream 16 Bit: " << data.GetStream16bit() << "\n";
std::cout << "Stream Stereo: " << data.GetStreamStereo() << "\n";
std::cout << "Sample Count Avg.: " << data.GetSampleCountAvg() << "\n";
#endif
delete data;
}
void AtFlashImportHandler::Import(FlashTagSoundStreamHead2 *data)
{
#if 0
std::cout << "\n<FlashTagSoundStreamHead2>\n";
std::cout << "Play Rate: " << (int)data.GetPlayRate() << "\n";
std::cout << "Play 16 Bit: " << data.GetPlay16bit() << "\n";
std::cout << "Play Stereo: " << data.GetPlayStereo()<< "\n";
std::cout << "Compression: " << (int)data.GetCompression() << "\n";
std::cout << "Stream Rate: " << (int)data.GetStreamRate() << "\n";
std::cout << "Stream 16 Bit: " << data.GetStream16bit() << "\n";
std::cout << "Stream Stereo: " << data.GetStreamStereo() << "\n";
std::cout << "Sample Count Avg.: " << data.GetSampleCountAvg() << "\n";
#endif
delete data;
}
void AtFlashImportHandler::Import(FlashTagSoundStreamBlock *data)
{
#if 0
std::cout << "\n<FlashTagSoundStreamBlock>\n";
std::cout << "Length:" << data.GetSampleLength() << "\n";
#endif
delete data;
}
FlashHeader AtFlashImporter::ImportHeader(std::istream &in, AtFlashImportHandler &i)
{
FlashHeader h;
in >> h;
i.Import(h);
return h;
}
#define IMPORT_MACRO(id, name) \
if(tagHeader.GetTagID() == id) \
{ \
name *tmp = new name(); \
tmp->SetImportSize(tagHeader.GetTagLength()); \
in >> *tmp; \
i.Import(tmp); \
}
bool AtFlashImporter::ImportTag(std::istream &in, AtFlashImportHandler &i)
{
FlashTagHeader tagHeader;
in >> tagHeader;
std::streampos start = in.tellg();
if(tagHeader.GetTagID() == 4)
{
FlashTagPlaceObject *tmp = new FlashTagPlaceObject();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp); // PlaceObject
}
else if(tagHeader.GetTagID() == 26)
{
FlashTagPlaceObject2 *tmp = new FlashTagPlaceObject2();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp); // PlaceObject2
}
else if(tagHeader.GetTagID() == 5)
{
FlashTagRemoveObject *tmp = new FlashTagRemoveObject();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp); // RemoveObject
}
else if(tagHeader.GetTagID() == 28)
{
FlashTagRemoveObject2 *tmp = new FlashTagRemoveObject2();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp); // RemoveObject2
}
else if(tagHeader.GetTagID() == 1)
{
FlashTagShowFrame *tmp = new FlashTagShowFrame();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp); // ShowFrame
}
else if(tagHeader.GetTagID() == 9)
{
FlashTagBackgroundColor *tmp = new FlashTagBackgroundColor();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else if(tagHeader.GetTagID() == 43)
{
FlashTagLabelFrame *tmp = new FlashTagLabelFrame();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else if(tagHeader.GetTagID() == 24)
{
FlashTagProtect *tmp = new FlashTagProtect();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else if(tagHeader.GetTagID() == 0)
{
FlashTagEnd *tmp = new FlashTagEnd();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else if(tagHeader.GetTagID() == 56)
{
FlashTagExportAssets *tmp = new FlashTagExportAssets();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else if(tagHeader.GetTagID() == 57)
{
FlashTagImportAssets *tmp = new FlashTagImportAssets();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else IMPORT_MACRO(8, FlashTagJPEGTables)
else IMPORT_MACRO(6, FlashTagDefineBitsJPEG1)
else IMPORT_MACRO(21, FlashTagDefineBitsJPEG2)
else IMPORT_MACRO(35, FlashTagDefineBitsJPEG3)
else IMPORT_MACRO(20, FlashTagDefineBitsLossless)
else IMPORT_MACRO(36, FlashTagDefineBitsLossless2)
else IMPORT_MACRO(2, FlashTagDefineShape1)
else IMPORT_MACRO(22, FlashTagDefineShape2)
else IMPORT_MACRO(32, FlashTagDefineShape3)
else IMPORT_MACRO(3, FlashTagFreeCharacter)
else if(tagHeader.GetTagID() == 14)
{
int c = in.get();
if(c == EOF)
{
//throw
}
else
{
if(c & FTDS_COMPRESS_MP3 != 0)
{
in.putback(c);
FlashTagDefineSoundMP3 *tmp = new FlashTagDefineSoundMP3();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
else
{
in.putback(c);
FlashTagDefineSound *tmp = new FlashTagDefineSound();
tmp->SetImportSize(tagHeader.GetTagLength());
in >> *tmp;
i.Import(tmp);
}
}
}
else IMPORT_MACRO(15, FlashTagStartSound)
else IMPORT_MACRO(18, FlashTagSoundStreamHead)
else IMPORT_MACRO(45, FlashTagSoundStreamHead2)
else IMPORT_MACRO(19, FlashTagSoundStreamBlock)
else
{
// skip
for(UDWORD index=0; index < tagHeader.GetTagLength(); index++)
{
in.get();
}
i.Import(tagHeader);
}
if(tagHeader.GetTagLength() + start != (UDWORD)in.tellg())
{
if(tagHeader.GetTagLength() + start > (UDWORD)in.tellg())
{
UDWORD difference = (tagHeader.GetTagLength() + start) - (UDWORD)in.tellg();
std::cerr << "Extra Tag Data Encountered: " << difference;
for(UDWORD index=0; index < difference; index++)
{
in.get();
}
}
else
{
long difference = (long )in.tellg() - (long)(tagHeader.GetTagLength() + start);
// std::cout << "Tag Size Discrepancy: -" << difference;
char msg[256];
sprintf( msg, "Tag size discrepancy at 0x%x\n", start );
std::cerr << msg;
// attempt to recover
in.seekg( (long)(tagHeader.GetTagLength() + start ) );
if ( in.fail() )
throw AtException( msg );
}
}
if(tagHeader.GetTagID() == 0)
{
return false;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -