|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TIMAGE_IO_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
#define TIMAGE_IO_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
481b59 |
// #include "trasterimage.h"
|
|
shun-iwasawa |
481b59 |
// #include "texception.h"
|
|
shun-iwasawa |
481b59 |
// #include "tfilepath.h"
|
|
Toshihiro Shimizu |
890ddd |
#include <qstringlist></qstringlist>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tfilepath_io.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "traster.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "timage.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TIMAGE_IO_EXPORTS
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_EXPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_EXPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_IMPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_IMPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// forward declaration
|
|
Shinya Kitaoka |
120a6e |
namespace Tiio {
|
|
Toshihiro Shimizu |
890ddd |
class Reader;
|
|
Toshihiro Shimizu |
890ddd |
class Writer;
|
|
Toshihiro Shimizu |
890ddd |
class VectorReader;
|
|
Toshihiro Shimizu |
890ddd |
class VectorWriter;
|
|
shun-iwasawa |
481b59 |
} // namespace Tiio
|
|
Toshihiro Shimizu |
890ddd |
class TPropertyGroup;
|
|
Toshihiro Shimizu |
890ddd |
class TImageInfo;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI TImageException final : public TException {
|
|
Shinya Kitaoka |
120a6e |
TFilePath m_fp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TImageException(const TFilePath &fp, const std::string &msg);
|
|
Shinya Kitaoka |
120a6e |
~TImageException() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
TString getMessage() const override;
|
|
Shinya Kitaoka |
120a6e |
TString getRawMessage() const { return TException::getMessage(); }
|
|
Shinya Kitaoka |
120a6e |
const TFilePath &getFilePath() const { return m_fp; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI TImageVersionException final : public TException {
|
|
Shinya Kitaoka |
120a6e |
TFilePath m_fp;
|
|
Shinya Kitaoka |
120a6e |
int m_major, m_minor;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TImageVersionException(const TFilePath &fp, int major, int minor);
|
|
Shinya Kitaoka |
120a6e |
~TImageVersionException() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void getVersion(int &major, int &minor) const {
|
|
Shinya Kitaoka |
120a6e |
major = m_major;
|
|
Shinya Kitaoka |
120a6e |
minor = m_minor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
int getMajor() const { return m_major; }
|
|
Shinya Kitaoka |
120a6e |
int getMinor() const { return m_minor; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// Image Reader
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TImageReader;
|
|
Toshihiro Shimizu |
890ddd |
typedef TImageReader *TImageReaderCreateProc(const TFilePath &path);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! \include imgReader_ex.cpp
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TImageReader : public TSmartObject {
|
|
Shinya Kitaoka |
120a6e |
DECLARE_CLASS_CODE
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
friend class TImageReaderP;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
120a6e |
// std::fstream m_stream;
|
|
Shinya Kitaoka |
120a6e |
TFilePath m_path;
|
|
Shinya Kitaoka |
120a6e |
FILE *m_file;
|
|
Shinya Kitaoka |
120a6e |
Tiio::Reader *m_reader;
|
|
Shinya Kitaoka |
120a6e |
Tiio::VectorReader *m_vectorReader;
|
|
Shinya Kitaoka |
120a6e |
void open();
|
|
Shinya Kitaoka |
120a6e |
void close();
|
|
Shinya Kitaoka |
120a6e |
bool isOpen() const;
|
|
Shinya Kitaoka |
120a6e |
bool m_readGreytones;
|
|
Shinya Kitaoka |
120a6e |
bool m_is64BitEnabled;
|
|
shun-iwasawa |
481b59 |
bool m_isFloatEnabled;
|
|
Shinya Kitaoka |
120a6e |
int m_shrink;
|
|
Shinya Kitaoka |
120a6e |
TRect m_region;
|
|
Shinya Kitaoka |
120a6e |
static bool m_safeMode;
|
|
shun-iwasawa |
481b59 |
double m_colorSpaceGamma;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
static void setSafeModeReadingForTzl(bool activated) {
|
|
Shinya Kitaoka |
120a6e |
m_safeMode = activated;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TImageReader(const TFilePath &path);
|
|
Shinya Kitaoka |
120a6e |
virtual ~TImageReader();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
TImageReader(const TImageReader &);
|
|
Shinya Kitaoka |
120a6e |
TImageReader &operator=(const TImageReader &src);
|
|
Shinya Kitaoka |
120a6e |
TImageP load0();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
// TImageReader keeps ownership: DO NOT DELETE
|
|
Shinya Kitaoka |
120a6e |
virtual const TImageInfo *getImageInfo() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath getFilePath() const { return m_path; };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPropertyGroup *getProperties();
|
|
Shinya Kitaoka |
120a6e |
void setProperties(const TPropertyGroup *);
|
|
Shinya Kitaoka |
120a6e |
/*! Load Image from disk.
|
|
Shinya Kitaoka |
120a6e |
If set region then loads only image's region.
|
|
Shinya Kitaoka |
120a6e |
If set shrink then loads image (or region, if set) with shrink.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Note: if the region, or part of it, is not contained in the image
|
|
Shinya Kitaoka |
120a6e |
then returns only the intersection between the image and region.
|
|
Shinya Kitaoka |
120a6e |
If the intersection is void returns TImageP();
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
virtual TImageP load();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void load(const TRasterP &ras, const TPoint &pos = TPoint(0, 0),
|
|
Shinya Kitaoka |
120a6e |
int shrinkX = 1, int shrinkY = 1);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static bool load(const TFilePath &, TRasterP &);
|
|
Shinya Kitaoka |
120a6e |
static bool load(const TFilePath &, TImageP &);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Only for TLV (version 13). Return the icon in TLV file.
|
|
Shinya Kitaoka |
120a6e |
virtual TImageP loadIcon() { return TImageP(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void getSupportedFormats(QStringList &names);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// TDimension getSize() const;
|
|
Shinya Kitaoka |
120a6e |
// virtual TRect getBBox() const = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void define(QString extension, TImageReaderCreateProc *proc);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void doReadGraytones(bool readThem);
|
|
Shinya Kitaoka |
120a6e |
void enable16BitRead(bool is64bitEnabled) {
|
|
Shinya Kitaoka |
120a6e |
m_is64BitEnabled = is64bitEnabled;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
481b59 |
void enableFloatRead(bool isFloatEnabled) {
|
|
shun-iwasawa |
481b59 |
m_isFloatEnabled = isFloatEnabled;
|
|
shun-iwasawa |
481b59 |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int getShrink() const { return m_shrink; }
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
Setta lo shrink in modo che al load() viene letta da disco
|
|
Shinya Kitaoka |
120a6e |
una riga ogni "shrink" righe ed all'interno di queste righe viene
|
|
Shinya Kitaoka |
120a6e |
letto un pixel ogni "shrink" pixel.
|
|
Shinya Kitaoka |
120a6e |
La prima riga viene sempre letta.
|
|
Shinya Kitaoka |
120a6e |
Il primo pixel di una riga letta viene sempre preso.
|
|
Shinya Kitaoka |
120a6e |
Nota che se shrink=1 non viene saltata alcuna riga ne pixel.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
void setShrink(int shrink);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
Set image's region.
|
|
Shinya Kitaoka |
120a6e |
Region dimension doesn't consider shrink.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
void setRegion(TRect rect) { m_region = rect; }
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
Returns the image region.
|
|
Shinya Kitaoka |
120a6e |
Region dimension doesn't consider shrink
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
TRect getRegion() const { return m_region; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void getTzpPaletteColorNames(
|
|
Shinya Kitaoka |
120a6e |
std::map<int, std::pair<std::string,="" std::string="">></int,>
|
|
Shinya Kitaoka |
120a6e |
&pltColorNames); // colorindex(<256: paint), pagename, colorname
|
|
shun-iwasawa |
481b59 |
|
|
shun-iwasawa |
481b59 |
void setColorSpaceGamma(const double colorSpaceGamma) {
|
|
shun-iwasawa |
481b59 |
m_colorSpaceGamma = colorSpaceGamma;
|
|
shun-iwasawa |
481b59 |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TSmartPointerT<timagereader>;</timagereader>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI TImageReaderP final : public TSmartPointerT<timagereader> {</timagereader>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TImageReaderP(TImageReader *ir) : TSmartPointerT<timagereader>(ir){};</timagereader>
|
|
Shinya Kitaoka |
120a6e |
// il costruttore "non banale"
|
|
Shinya Kitaoka |
120a6e |
TImageReaderP(const TFilePath &filepath);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// Image Writer
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TImageWriter;
|
|
Toshihiro Shimizu |
890ddd |
typedef TImageWriter *TImageWriterCreateProc(const TFilePath &path);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! \include imgWriter_ex.cpp
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TImageWriter : public TSmartObject {
|
|
Shinya Kitaoka |
120a6e |
DECLARE_CLASS_CODE
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
93fdd4 |
// Background color for saving transparent pixel to the format not
|
|
shun-iwasawa |
93fdd4 |
// supporting alpha channel. Specified in the preferences.
|
|
shun-iwasawa |
93fdd4 |
static TPixel32 m_backgroundColor;
|
|
shun-iwasawa |
93fdd4 |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
120a6e |
// std::fstream m_stream;
|
|
Shinya Kitaoka |
120a6e |
TFilePath m_path;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Tiio::Writer *m_writer;
|
|
Shinya Kitaoka |
120a6e |
Tiio::VectorWriter *m_vectorWriter;
|
|
Shinya Kitaoka |
120a6e |
TPropertyGroup *m_properties;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TImageWriter(const TFilePath &path);
|
|
Shinya Kitaoka |
120a6e |
virtual ~TImageWriter();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
TImageWriter(const TImageWriter &);
|
|
Shinya Kitaoka |
120a6e |
TImageWriter &operator=(const TImageWriter &src);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
justburner |
0be1bc |
void setFilePath(const TFilePath &path) { m_path = path; }
|
|
Shinya Kitaoka |
120a6e |
TFilePath getFilePath() const { return m_path; };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// don't get ownership
|
|
Shinya Kitaoka |
120a6e |
void setProperties(const TPropertyGroup *);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
virtual void save(const TImageP &img);
|
|
Shinya Kitaoka |
120a6e |
virtual bool is64bitOutputSupported() { return true; }
|
|
Shinya Kitaoka |
120a6e |
static void save(const TFilePath &, TRasterP);
|
|
Shinya Kitaoka |
120a6e |
static void save(const TFilePath &, const TImageP &);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void getSupportedFormats(QStringList &names, bool onlyRenderFormats);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void define(QString extension, TImageWriterCreateProc *proc,
|
|
Shinya Kitaoka |
120a6e |
bool isRenderFormat);
|
|
shun-iwasawa |
93fdd4 |
|
|
shun-iwasawa |
93fdd4 |
static void setBackgroundColor(TPixel32 color);
|
|
shun-iwasawa |
93fdd4 |
static TPixel32 getBackgroundColor();
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TSmartPointerT<timagewriter>;</timagewriter>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI TImageWriterP final : public TSmartPointerT<timagewriter> {</timagewriter>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TImageWriterP(TImageWriter *iw) : TSmartPointerT<timagewriter>(iw){};</timagewriter>
|
|
Shinya Kitaoka |
120a6e |
// il costruttore "non banale"
|
|
Shinya Kitaoka |
120a6e |
TImageWriterP(const TFilePath &filepath);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// Image ReaderWriter
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TImageReaderWriter;
|
|
Toshihiro Shimizu |
890ddd |
typedef TImageReaderWriter *TImageReaderWriterCreateProc(const TFilePath &path);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|