|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TTIO_TZL_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
#define TTIO_TZL_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tlevel_io.h"
|
|
Toshihiro Shimizu |
890ddd |
#include <set></set>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TImageWriterTzl;
|
|
Toshihiro Shimizu |
890ddd |
class TImageReaderTzl;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterTzl:
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TzlChunk
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TINT32 m_offs;
|
|
Toshihiro Shimizu |
890ddd |
TINT32 m_length;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TzlChunk(TINT32 offs, TINT32 length) : m_offs(offs), m_length(length) {}
|
|
Toshihiro Shimizu |
890ddd |
TzlChunk() : m_offs(0), m_length(0) {}
|
|
Toshihiro Shimizu |
890ddd |
bool operator<(const TzlChunk &c) const { return m_offs < c.m_offs; }
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
typedef std::map<tframeid, tzlchunk=""> TzlOffsetMap;</tframeid,>
|
|
Toshihiro Shimizu |
890ddd |
class TRasterCodecLZO;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TLevelWriterTzl : public TLevelWriter
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
//bool m_paletteWritten;
|
|
Toshihiro Shimizu |
890ddd |
bool m_headerWritten;
|
|
Toshihiro Shimizu |
890ddd |
bool m_creatorWritten;
|
|
Toshihiro Shimizu |
890ddd |
FILE *m_chan;
|
|
Toshihiro Shimizu |
890ddd |
TLevelP m_level;
|
|
Toshihiro Shimizu |
890ddd |
TFilePath m_path, m_palettePath;
|
|
Toshihiro Shimizu |
890ddd |
long m_frameCountPos;
|
|
Toshihiro Shimizu |
890ddd |
int m_frameCount;
|
|
Toshihiro Shimizu |
890ddd |
TzlOffsetMap m_frameOffsTable;
|
|
Toshihiro Shimizu |
890ddd |
TzlOffsetMap m_iconOffsTable;
|
|
Toshihiro Shimizu |
890ddd |
std::set<tzlchunk> m_freeChunks;</tzlchunk>
|
|
Toshihiro Shimizu |
890ddd |
bool m_exists;
|
|
Toshihiro Shimizu |
890ddd |
TPalette *m_palette;
|
|
Toshihiro Shimizu |
890ddd |
TDimension m_res;
|
|
Toshihiro Shimizu |
890ddd |
TINT32 m_offsetTablePos;
|
|
Toshihiro Shimizu |
890ddd |
TINT32 m_iconOffsetTablePos;
|
|
Toshihiro Shimizu |
890ddd |
std::map<tframeid, tframeid=""> m_renumberTable;</tframeid,>
|
|
Toshihiro Shimizu |
890ddd |
const char *m_magic;
|
|
Toshihiro Shimizu |
890ddd |
int m_version;
|
|
Toshihiro Shimizu |
890ddd |
bool m_updatedIconsSize;
|
|
Toshihiro Shimizu |
890ddd |
TDimension m_userIconSize; //IconSize settata dall'utente
|
|
Toshihiro Shimizu |
890ddd |
TDimension m_iconSize; // IconSize in the file according to image aspect ratio.
|
|
Toshihiro Shimizu |
890ddd |
TDimension m_currentIconSize; // If file exists this is the current IconSize in the file
|
|
Toshihiro Shimizu |
890ddd |
TRasterCodecLZO *m_codec;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool m_overwritePaletteFlag;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterTzl(const TFilePath &path, TPropertyGroup *winfo);
|
|
Toshihiro Shimizu |
890ddd |
~TLevelWriterTzl();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setPalette(TPalette *palette);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setOverwritePaletteFlag(bool overwrite)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_overwritePaletteFlag = overwrite;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void renumberFids(const std::map<tframeid, tframeid=""> &renumberTable);</tframeid,>
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Setta le dimensioni dell'iconcina nel file.
|
|
Toshihiro Shimizu |
890ddd |
ATTENZIONE: va necessariamente richiamata prima di renumberFids()!
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
void setIconSize(TDimension iconSize);
|
|
Toshihiro Shimizu |
890ddd |
TDimension getIconSize() const { return m_iconSize; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterP getFrameWriter(TFrameId fid);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// friend class TImageWriterTzl;
|
|
Toshihiro Shimizu |
890ddd |
// Save Image and icon
|
|
Toshihiro Shimizu |
890ddd |
void save(const TImageP &img);
|
|
Toshihiro Shimizu |
890ddd |
void save(const TImageP &img, const TFrameId &fid);
|
|
Toshihiro Shimizu |
890ddd |
// save only icon
|
|
Toshihiro Shimizu |
890ddd |
void saveIcon(const TImageP &img, const TFrameId &fid);
|
|
Toshihiro Shimizu |
890ddd |
// check icon size. Return True if newSize is not equal to currentIconSize (the iconSize in File)
|
|
Toshihiro Shimizu |
890ddd |
bool checkIconSize(const TDimension &newSize);
|
|
Toshihiro Shimizu |
890ddd |
// Update all icons with new size. Return true if success.
|
|
Toshihiro Shimizu |
890ddd |
bool resizeIcons(const TDimension &newSize);
|
|
Toshihiro Shimizu |
890ddd |
void remove(const TFrameId &fid);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Da informazioni relativamente allo spazio libero presente su file.
|
|
Toshihiro Shimizu |
890ddd |
Ritorna un numero compreso tra 0 e 1: 0 nessuno spazio libero, 1 tutto lo spazio รจ libero.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
float getFreeSpace();
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Save the file without freeSpace.
|
|
Toshihiro Shimizu |
890ddd |
Salva tutti i frame in maniera continua, senza buchi.
|
|
Toshihiro Shimizu |
890ddd |
Return TRUE if successfully.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
bool optimize();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
static TLevelWriter *create(const TFilePath &f, TPropertyGroup *winfo)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return new TLevelWriterTzl(f, winfo);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
bool m_adjustRatio;
|
|
Toshihiro Shimizu |
890ddd |
void doSave(const TImageP &img, const TFrameId &fid);
|
|
Toshihiro Shimizu |
890ddd |
// Save image on disk. If isIcon is true save image as icon.
|
|
Toshihiro Shimizu |
890ddd |
void saveImage(const TImageP &img, const TFrameId &fid, bool isIcon = false);
|
|
Toshihiro Shimizu |
890ddd |
void createIcon(const TImageP &imgIn, TImageP &imgOut);
|
|
Toshihiro Shimizu |
890ddd |
bool convertToLatestVersion();
|
|
Toshihiro Shimizu |
890ddd |
void writeHeader(const TDimension &size);
|
|
Toshihiro Shimizu |
890ddd |
void buildFreeChunksTable();
|
|
Toshihiro Shimizu |
890ddd |
void addFreeChunk(TINT32 offs, TINT32 length);
|
|
Toshihiro Shimizu |
890ddd |
TINT32 findSavingChunk(const TFrameId &fid, TINT32 length, bool isIcon = false);
|
|
Toshihiro Shimizu |
890ddd |
//not implemented
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterTzl(const TLevelWriterTzl &);
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterTzl &operator=(const TLevelWriterTzl &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderTzl:
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
class TLevelReaderTzl : public TLevelReader
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderTzl(const TFilePath &path);
|
|
Toshihiro Shimizu |
890ddd |
~TLevelReaderTzl();
|
|
Toshihiro Shimizu |
890ddd |
void doReadPalette(bool doReadIt);
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Return info about current tzl
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
TLevelP loadInfo();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Return an image with Reader information
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderP getFrameReader(TFrameId fid);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QString getCreator();
|
|
Toshihiro Shimizu |
890ddd |
friend class TImageReaderTzl;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Return TLV version
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
int getVersion() { return m_version; }
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Get the iconSize in the file. Return TRUE if icon exists, return FALSE if it not exists.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
bool getIconSize(TDimension &iconSize);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
FILE *m_chan;
|
|
Toshihiro Shimizu |
890ddd |
TLevelP m_level;
|
|
Toshihiro Shimizu |
890ddd |
TDimension m_res;
|
|
Toshihiro Shimizu |
890ddd |
double m_xDpi, m_yDpi;
|
|
Toshihiro Shimizu |
890ddd |
//int m_frameIndex;
|
|
Toshihiro Shimizu |
890ddd |
//TzlOffsetMap m_frameOffset;//per le vecchie tzl
|
|
Toshihiro Shimizu |
890ddd |
TzlOffsetMap m_frameOffsTable;
|
|
Toshihiro Shimizu |
890ddd |
TzlOffsetMap m_iconOffsTable;
|
|
Toshihiro Shimizu |
890ddd |
int m_version;
|
|
Toshihiro Shimizu |
890ddd |
QString m_creator;
|
|
Toshihiro Shimizu |
890ddd |
bool m_readPalette;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
static TLevelReader *create(const TFilePath &f)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return new TLevelReaderTzl(f);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
void readPalette();
|
|
Toshihiro Shimizu |
890ddd |
// not implemented
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderTzl(const TLevelReaderTzl &);
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderTzl &operator=(const TLevelReaderTzl &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif //TTIO_TZL_INCLUDED
|