tahoma2d/toonz/sources/include/tiio.h

180 lines
4.7 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 TIIO_INCLUDED
#define TIIO_INCLUDED
#include "tcommon.h"
#include <string>
#include <QStringList>
#include "timageinfo.h"
#undef DVAPI
#undef DVVAR
#ifdef TNZCORE_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
class TVectorImage;
class TPropertyGroup;
2016-06-15 18:43:10 +12:00
namespace Tiio {
2016-03-19 06:57:51 +13:00
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
enum RowOrder { BOTTOM2TOP, TOP2BOTTOM };
2016-03-19 06:57:51 +13:00
//-------------------------------------------------------------------
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class DVAPI Exception {};
2016-03-19 06:57:51 +13:00
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class DVAPI Reader {
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
TImageInfo m_info;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
Reader();
virtual ~Reader();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void open(FILE *file) = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
const TImageInfo &getImageInfo() const { return m_info; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual TPropertyGroup *getProperties() const { return 0; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void readLine(char *buffer) { readLine(buffer, 0, m_info.m_lx - 1, 1); }
void readLine(short *buffer) { readLine(buffer, 0, m_info.m_lx - 1, 1); }
virtual void readLine(char *buffer, int x0, int x1, int shrink) = 0;
virtual void readLine(short *, int, int, int) { assert(false); }
// Returns skipped lines number.
// If not implemented returns 0;
virtual int skipLines(int lineCount) = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual RowOrder getRowOrder() const { return BOTTOM2TOP; }
virtual bool read16BitIsEnabled() const { return false; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
// this function enables/disables the 64 bit reading.
// If disabled, 64 bit images will be automatically scaled down to 32 bit.
// The default behaviour for formats that support 64 bit images is "Enabled"
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void enable16BitRead(bool) {}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void getTzpPaletteColorNames(
std::map<int, std::pair<std::string, std::string>> &pltColorNames) const {
assert(false);
}
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
// not implemented
Reader(const Reader &);
Reader &operator=(const Reader &);
2016-03-19 06:57:51 +13:00
};
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class DVAPI Writer {
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
TImageInfo m_info;
TPropertyGroup *m_properties;
static int m_bwThreshold;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
static void getSupportedFormats(QStringList &formats, bool onlyRenderFormats);
static void setBlackAndWhiteThreshold(int threshold) {
m_bwThreshold = threshold;
}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
Writer();
virtual ~Writer();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void open(FILE *file, const TImageInfo &inafo) = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
TPropertyGroup *getProperties() { return m_properties; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void writeLine(char *buffer) = 0;
virtual void writeLine(short *) { assert(false); }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void flush() {}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual RowOrder getRowOrder() const { return BOTTOM2TOP; }
virtual bool write64bitSupported() const { return false; }
2018-12-19 18:29:00 +13:00
virtual bool writeAlphaSupported() const { return true; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setProperties(TPropertyGroup *properties);
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
// not implemented
Writer(const Writer &);
Writer &operator=(const Writer &);
2016-03-19 06:57:51 +13:00
};
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class DVAPI VectorReader {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
VectorReader() {}
virtual ~VectorReader() {}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void open(FILE *file) = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual TVectorImage *read() = 0;
2016-03-19 06:57:51 +13:00
};
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class DVAPI VectorWriter {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
VectorWriter() {}
virtual ~VectorWriter() {}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void open(FILE *file) = 0;
virtual void write(TVectorImage *) = 0;
2016-03-19 06:57:51 +13:00
};
//-------------------------------------------------------------------
typedef Reader *ReaderMaker();
typedef Writer *WriterMaker();
typedef VectorReader *VectorReaderMaker();
typedef VectorWriter *VectorWriterMaker();
//-------------------------------------------------------------------
DVAPI Tiio::Reader *makeReader(std::string ext);
DVAPI Tiio::Writer *makeWriter(std::string ext);
DVAPI Tiio::VectorReader *makeVectorReader(std::string ext);
DVAPI Tiio::VectorWriter *makeVectorWriter(std::string ext);
DVAPI TPropertyGroup *makeWriterProperties(std::string ext);
//-------------------------------------------------------------------
DVAPI void defineReaderMaker(const char *ext, Tiio::ReaderMaker *fn);
2016-06-15 18:43:10 +12:00
DVAPI void defineWriterMaker(const char *ext, Tiio::WriterMaker *fn,
bool isRenderFormat);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
DVAPI void defineVectorReaderMaker(const char *ext,
Tiio::VectorReaderMaker *fn);
DVAPI void defineVectorWriterMaker(const char *ext, Tiio::VectorWriterMaker *fn,
bool isRenderFormat);
2016-03-19 06:57:51 +13:00
DVAPI void defineWriterProperties(const char *ext, TPropertyGroup *);
DVAPI void updateFileWritersPropertiesTranslation();
2016-03-19 06:57:51 +13:00
//-------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
} // namespace
2016-03-19 06:57:51 +13:00
#endif