|
Toshihiro Shimizu |
890ddd |
#include "tiio_psd.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "trasterimage.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "timageinfo.h"
|
|
Keisuke Ogaki |
e6172d |
#if (defined(x64) || defined(__LP64__))
|
|
Keisuke Ogaki |
5ff9a7 |
#include "toonz/preferences.h"
|
|
Keisuke Ogaki |
8b06ff |
#include <qtcore></qtcore>
|
|
Keisuke Ogaki |
e6172d |
#endif
|
|
Keisuke Ogaki |
8b06ff |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//class TImageReaderLayerPsd;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// if path = :
|
|
Campbell Barton |
ea4f7e |
// filename.psd to load float image. TLevel frames number is 1
|
|
Campbell Barton |
ea4f7e |
// filename
|
|
Campbell Barton |
ea4f7e |
// filename
|
|
Campbell Barton |
ea4f7e |
// filename
|
|
Campbell Barton |
ea4f7e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderPsd::TLevelReaderPsd(const TFilePath &path)
|
|
Toshihiro Shimizu |
890ddd |
: TLevelReader(path), m_path(path), m_layerId(0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_psdreader = new TPSDReader(m_path);
|
|
Toshihiro Shimizu |
890ddd |
TPSDHeaderInfo header = m_psdreader->getPSDHeaderInfo();
|
|
Toshihiro Shimizu |
890ddd |
m_lx = header.cols;
|
|
Toshihiro Shimizu |
890ddd |
m_ly = header.rows;
|
|
Toshihiro Shimizu |
890ddd |
m_layersCount = header.layersCount;
|
|
Toshihiro Shimizu |
890ddd |
// set m_info
|
|
Toshihiro Shimizu |
890ddd |
m_info = new TImageInfo();
|
|
Toshihiro Shimizu |
890ddd |
m_info->m_lx = m_lx;
|
|
Toshihiro Shimizu |
890ddd |
m_info->m_ly = m_ly;
|
|
Toshihiro Shimizu |
890ddd |
m_info->m_dpix = header.hres;
|
|
Toshihiro Shimizu |
890ddd |
m_info->m_dpiy = header.vres;
|
|
Toshihiro Shimizu |
890ddd |
m_info->m_bitsPerSample = header.depth;
|
|
Toshihiro Shimizu |
890ddd |
m_info->m_samplePerPixel = header.channels;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QString name = m_path.getName().c_str();
|
|
Toshihiro Shimizu |
890ddd |
QStringList list = name.split("#");
|
|
Toshihiro Shimizu |
890ddd |
if (list.size() >= 2) {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const QString &layerStr = list.at(1);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef REF_LAYER_BY_NAME
|
|
Keisuke Ogaki |
e6172d |
#if (defined(x64) || defined(__LP64__))
|
|
Toshihiro Shimizu |
890ddd |
if (layerStr != "frames") {
|
|
Keisuke Ogaki |
5ff9a7 |
QTextCodec* layerNameCodec = QTextCodec::codecForName( Preferences::instance()->getLayerNameEncoding().c_str() );
|
|
Toshihiro Shimizu |
890ddd |
TPSDParser psdparser(m_path);
|
|
Keisuke Ogaki |
8b06ff |
m_layerId = psdparser.getLevelIdByName(layerNameCodec->fromUnicode(layerStr).toStdString());
|
|
Keisuke Ogaki |
e6172d |
} else {
|
|
Toshihiro Shimizu |
890ddd |
m_layerId = layerStr.toInt();
|
|
Keisuke Ogaki |
e6172d |
}
|
|
Keisuke Ogaki |
e6172d |
#endif
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
m_layerId = layerName.toInt();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderPsd::~TLevelReaderPsd()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
delete m_psdreader;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TLevelReaderPsd::load(TRasterImageP &rasP, int shrinkX, int shrinkY, TRect region)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
QMutexLocker sl(&m_mutex);
|
|
Toshihiro Shimizu |
890ddd |
TRasterImageP img;
|
|
Toshihiro Shimizu |
890ddd |
m_psdreader->setShrink(shrinkX, shrinkY);
|
|
Toshihiro Shimizu |
890ddd |
m_psdreader->setRegion(region);
|
|
Toshihiro Shimizu |
890ddd |
m_psdreader->load(img, m_layerId); // if layerId==0 load Merged
|
|
Toshihiro Shimizu |
890ddd |
rasP = img;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TLevelP TLevelReaderPsd::loadInfo()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TPSDParser *psdparser = new TPSDParser(m_path);
|
|
Toshihiro Shimizu |
890ddd |
assert(m_layerId >= 0);
|
|
Toshihiro Shimizu |
890ddd |
int framesCount = psdparser->getFramesCount(m_layerId);
|
|
Toshihiro Shimizu |
890ddd |
TLevelP level;
|
|
Toshihiro Shimizu |
890ddd |
level->setName(psdparser->getLevelName(m_layerId));
|
|
Toshihiro Shimizu |
890ddd |
m_frameTable.clear();
|
|
Toshihiro Shimizu |
890ddd |
for (int i = 0; i < framesCount; i++) {
|
|
Toshihiro Shimizu |
890ddd |
TFrameId frame(i + 1);
|
|
Shinya Kitaoka |
2148c8 |
m_frameTable.insert(std::make_pair(frame, psdparser->getFrameId(m_layerId, i)));
|
|
Toshihiro Shimizu |
890ddd |
level->setFrame(frame, TImageP());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
return level;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TLevelReader *TLevelReaderPsd::create(const TFilePath &f)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderPsd *reader = new TLevelReaderPsd(f);
|
|
Toshihiro Shimizu |
890ddd |
return reader;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TImageReaderLayerPsd : public TImageReader
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderLayerPsd(const TFilePath &, int layerId, TLevelReaderPsd *lr, TImageInfo *info);
|
|
Toshihiro Shimizu |
890ddd |
~TImageReaderLayerPsd() { m_lr->release(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderLayerPsd(const TImageReaderLayerPsd &);
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderLayerPsd &operator=(const TImageReaderLayerPsd &src);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TImageP load();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const TImageInfo *getImageInfo() const { return m_info; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
TPSDReader *m_psdreader;
|
|
Toshihiro Shimizu |
890ddd |
TLevelReaderPsd *m_lr;
|
|
Toshihiro Shimizu |
890ddd |
TImageInfo *m_info;
|
|
Toshihiro Shimizu |
890ddd |
int m_layerId;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderLayerPsd::TImageReaderLayerPsd(const TFilePath &path, int layerId, TLevelReaderPsd *lr, TImageInfo *info)
|
|
Toshihiro Shimizu |
890ddd |
: TImageReader(path), m_lr(lr), m_layerId(layerId), m_info(info)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_lr->setLayerId(layerId);
|
|
Toshihiro Shimizu |
890ddd |
m_lr->addRef();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageP TImageReaderLayerPsd::load()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TRasterImageP rasP;
|
|
Toshihiro Shimizu |
890ddd |
m_lr->load(rasP, m_shrink, m_shrink, m_region);
|
|
Toshihiro Shimizu |
890ddd |
return TRasterImageP(rasP);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderP TLevelReaderPsd::getFrameReader(TFrameId fid)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int layerId = m_frameTable[fid];
|
|
Toshihiro Shimizu |
890ddd |
TImageReaderLayerPsd *ir = new TImageReaderLayerPsd(m_path, layerId, this, m_info);
|
|
Toshihiro Shimizu |
890ddd |
return TImageReaderP(ir);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TImageWriterPsd : public TImageWriter
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int m_layerId;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterPsd(const TFilePath &, int frameIndex, TLevelWriterPsd *);
|
|
Toshihiro Shimizu |
890ddd |
~TImageWriterPsd() { m_lwm->release(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterPsd(const TImageWriterPsd &);
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterPsd &operator=(const TImageWriterPsd &src);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void save(const TImageP &);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterPsd *m_lwm;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterPsd::TImageWriterPsd(const TFilePath &path, int layerId, TLevelWriterPsd *lwm)
|
|
Toshihiro Shimizu |
890ddd |
: TImageWriter(path), m_lwm(lwm), m_layerId(layerId)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_lwm->addRef();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TImageWriterPsd::save(const TImageP &img)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_lwm->save(img, m_layerId);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TLevelWriterPsd::save(const TImageP &img, int frameIndex)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterPsd::TLevelWriterPsd(const TFilePath &path, TPropertyGroup *winfo)
|
|
Toshihiro Shimizu |
890ddd |
: TLevelWriter(path, winfo)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TLevelWriterPsd::~TLevelWriterPsd()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterP TLevelWriterPsd::getFrameWriter(TFrameId fid)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int layerId = 0;
|
|
Toshihiro Shimizu |
890ddd |
TImageWriterPsd *iwm = new TImageWriterPsd(m_path, layerId, this);
|
|
Toshihiro Shimizu |
890ddd |
return TImageWriterP(iwm);
|
|
Toshihiro Shimizu |
890ddd |
}
|