#include "main.h"
#include "support.h"
#ifdef WIN32_DLL_WORKAROUND
template <class T>
class LTIDLLFileStream : public T
{
public:
LTIDLLFileStream() {}
virtual ~LTIDLLFileStream() {}
};
#endif
{
public:
{
return sts;
#ifdef WIN32_DLL_WORKAROUND
m_stream = new LTIDLLFileStream<LTIOFileStream>;
#else
#endif
if (!m_stream)
sts = m_stream->open();
return sts;
sts = setPixelProps(pixelProps);
return sts;
sts = setDimensions(width, height);
return sts;
sts = setDefaultGeoCoord(*this);
return sts;
}
lt_int64 getPhysicalFileSize(void) const
{
const lt_int64 pos = m_stream->tell();
const lt_int64 siz = m_stream->tell();
return siz;
}
protected:
{
const lt_uint32 bytesPerPixel = getPixelProps().getNumBytes();
const lt_uint32 sceneRowBytes = numCols * bytesPerPixel;
m_rowBuffer =
new lt_uint8[sceneRowBytes];
}
{
const lt_uint32 sceneRowBytes = numCols * bytesPerPixel;
for (
lt_uint32 row = 0; row < numRows; row++)
{
return sts;
if (m_stream->read(m_rowBuffer, sceneRowBytes) != sceneRowBytes)
return m_stream->getLastError();
for(
lt_uint16 band = 0; band < numBands; band++)
{
const lt_uint8 *src = m_rowBuffer + band * bytesPerSample;
dst += row * totalNumCols * bytesPerSample;
for(
lt_uint32 col = 0; col < numCols; col++, src += bytesPerPixel, dst += bytesPerSample)
memcpy(dst, src, bytesPerSample);
}
curPos += m_rowBytes;
}
}
{
delete [] m_rowBuffer;
m_rowBuffer = NULL;
}
{
return m_stream != NULL ? m_stream->getID() : NULL;
}
private:
#ifdef WIN32_DLL_WORKAROUND
LTIDLLFileStream<LTIOFileStream> *m_stream;
#else
#endif
};
MyReader::MyReader() :
m_stream(NULL),
m_rowBuffer(NULL),
m_rowBytes(0)
{
}
MyReader::~MyReader()
{
m_stream->close();
delete m_stream;
delete[] m_rowBuffer;
}
MyReader*
MyReader::create()
{
return new MyReader;
}
{
MyReader *reader = MyReader::create();
TEST_BOOL(reader != NULL);
TEST_SUCCESS(reader->initialize(fileSpec, pixel, 640, 480));
TEST_SUCCESS(writer.initialize(reader));
TEST_SUCCESS(writer.setOutputFileSpec(OUTPUT_PATH("meg.bip")));
const LTIScene scene(0, 0, 640, 480, 1.0);
TEST_SUCCESS(writer.write(scene));
TEST_BOOL(Compare(OUTPUT_PATH("meg.bip"), INPUT_PATH("meg.bip")));
Remove(OUTPUT_PATH("meg.bip"));
Remove(OUTPUT_PATH("meg.hdr"));
reader->release();
reader = NULL;
}