tahoma2d/toonz/sources/image/pli/tiio_pli.h

159 lines
3.4 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef TTIO_PLI_INCLUDED
#define TTIO_PLI_INCLUDED
2016-04-15 19:44:40 +12:00
#include <memory>
2016-03-19 06:57:51 +13:00
#include "tlevel_io.h"
class GroupTag;
2016-03-19 06:57:51 +13:00
class ParsedPli;
class ImageTag;
class TImageWriterPli;
class TImageReaderPli;
//===========================================================================
/*
class TWriterInfoPli final : public TWriterInfo {
2016-03-19 06:57:51 +13:00
public:
~TWriterInfoPli() {}
2016-06-15 18:43:10 +12:00
static TWriterInfo *create(const std::string &ext) { return new
TWriterInfoPli(); }
2016-03-19 06:57:51 +13:00
TWriterInfo *clone() const {
return new TWriterInfoPli(*this); }
private:
TWriterInfoPli() {}
TWriterInfoPli(const TWriterInfoPli&) {}
};
*/
//===========================================================================
/*!
TLevelWriterPli:
*/
class TLevelWriterPli final : public TLevelWriter {
2016-06-15 18:43:10 +12:00
//! object to manage a pli
std::unique_ptr<ParsedPli> m_pli;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! number of frame in pli
UINT m_frameNumber;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
// vettore da utilizzare per il calcolo della palette
std::vector<TPixel> m_colorArray;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TLevelWriterPli(const TFilePath &path, TPropertyGroup *winfo);
~TLevelWriterPli();
2016-06-19 20:06:29 +12:00
TImageWriterP getFrameWriter(TFrameId fid) override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
friend class TImageWriterPli;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
static TLevelWriter *create(const TFilePath &f, TPropertyGroup *winfo) {
return new TLevelWriterPli(f, winfo);
}
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
// not implemented
TLevelWriterPli(const TLevelWriterPli &);
TLevelWriterPli &operator=(const TLevelWriterPli &);
2016-03-19 06:57:51 +13:00
};
//===========================================================================
typedef std::pair<ImageTag *, bool> pliFrameInfo;
/*!
TLevelReaderPli:
*/
class TLevelReaderPli final : public TLevelReader {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TLevelReaderPli(const TFilePath &path);
~TLevelReaderPli();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
/*!
Return info about current pli
*/
2016-06-19 20:06:29 +12:00
TLevelP loadInfo() override;
void doReadPalette(bool doReadIt) override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
/*!
Return an image with Reader information
*/
2016-06-19 20:06:29 +12:00
TImageReaderP getFrameReader(TFrameId fid) override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
QString getCreator() override;
2016-06-15 18:43:10 +12:00
friend class TImageReaderPli;
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
bool m_init;
//! struct which contanins reference to frame
std::map<TFrameId, pliFrameInfo> m_mapOfImage;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! Reference to pli palette
TPixel *m_palette;
bool m_readPalette;
//!
TUINT32 m_paletteCount;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! flag to check if file exists
bool m_doesExist;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! object to manage a pli
ParsedPli *m_pli;
TLevelP m_level;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
static TLevelReader *create(const TFilePath &f) {
return new TLevelReaderPli(f);
}
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
// not implemented
TLevelReaderPli(const TLevelReaderPli &);
TLevelReaderPli &operator=(const TLevelReaderPli &);
2016-03-19 06:57:51 +13:00
};
//===========================================================================
/*
Classe locale per la lettura di un frame del livello.
*/
class TImageReaderPli final : public TImageReader {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TFrameId m_frameId; //<! Current frame id
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
// not implemented
TImageReaderPli(const TImageReaderPli &);
TImageReaderPli &operator=(const TImageReaderPli &src);
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TImageReaderPli(const TFilePath &f, const TFrameId &frameId,
TLevelReaderPli *);
~TImageReaderPli() {}
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
TImageP load() override;
2016-06-15 18:43:10 +12:00
TImageP doLoad();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
TDimension getSize() const;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
TRect getBBox() const;
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
//! Size of image
int m_lx, m_ly;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
//! Reference to level reader
TLevelReaderPli *m_lrp;
2016-03-19 06:57:51 +13:00
};
// Functions
TPalette *readPalette(GroupTag *paletteTag, int majorVersion,
int minorVersion);
2016-06-15 18:43:10 +12:00
#endif // TTIO_PLI_INCLUDED