#pragma warning( disable : 4311 4312 )
#include "ImageIOHandlerRAW.h"
#include <QtGui/QFileDialog>
#include <QtGui/QMessageBox>
#include <QtCore/QDir>
MB_PLUGIN( "ImageIOHandlerRAW", "ImageIOHandler example", "Autodesk", "http://www.mudbox3d.com", ImageIOHandlerRAW::Initializer );
IMPLEMENT_SCLASS( ImageIOHandlerRAW, ImageIOHandler, QT_TRANSLATE_NOOP("ImageIOHandlerRAW", "ImageIOHandler example class"), 1 );
ImageIOHandlerRAW::ImageIOHandlerRAW( void )
{
m_sImageName = tr("RAW Output");
m_sImageDescription = tr("Outputs image in a RAW format.");
m_aExtensions.append(FileExtension(NTRQ("raw"), NTRQ("RAW file [8 bit, RGBA]"), Image::e8integer) );
m_aExtensions.append(FileExtension(NTRQ("raw"), NTRQ("RAW file [16 bit Integer, RGBA]"), Image::e16integer) );
m_aExtensions.append(FileExtension(NTRQ("raw"), NTRQ("RAW file [32 bit Floating Point, RGBA]"), Image::e32float) );
m_aFormats.append(PixelDescriptor(4, PixelDescriptor::sChar, PixelDescriptor::orderRGBA, false));
m_aFormats.append(PixelDescriptor(4, PixelDescriptor::sHalf, PixelDescriptor::orderRGBA, false));
m_aFormats.append(PixelDescriptor(4, PixelDescriptor::sFloat, PixelDescriptor::orderRGBA, false));
}
void ImageIOHandlerRAW::Initializer( void )
{
}
bool ImageIOHandlerRAW::Import(const QString &sFileName, mudbox::Image *pImage)
{
if (!pImage || !sFileName.size())
return false;
QFile f(sFileName);
if (f.open(QIODevice::ReadOnly))
{
char magicString[256];
f.read(magicString, 12);
QString magic(magicString);
if (magic != "MBRAWEXAMPLE")
{
f.close();
return false;
}
int width = 0;
f.read((char *) &width, sizeof(int));
int height = 0;
f.read((char *) &height, sizeof(int));
int nChannels = 0;
f.read((char *) &nChannels, sizeof(int));
int pixelSize = 0;
f.read((char *) &pixelSize, sizeof(int));
enum Image::Format fmt = Image::e8integer;
f.read((char *) &fmt, sizeof(int));
ImageDescriptor::MemoryChannelOrder channelOrder = ImageDescriptor::orderRGBA;
f.read((char *) &channelOrder, sizeof(int));
int imageSize = pixelSize * width * height;
char *pData = new char[imageSize];
f.read(pData, imageSize);
pImage->Create(width, height, nChannels, fmt, false, channelOrder);
pImage->setTile(0, 0, width, height, pData);
f.close();
delete pData;
return true;
}
return false;
}
bool ImageIOHandlerRAW::Export(const QString &sFileName, Image *pImage)
{
if (!pImage || !sFileName.size())
return false;
QFile f(sFileName);
if (f.open(QIODevice::WriteOnly))
{
f.write("MBRAWEXAMPLE", 12);
const ImageDescriptor &desc = pImage->getDescriptor();
int width = pImage->Width();
f.write((char *) &width, sizeof(int));
int height = pImage->Height();
f.write((char *) &height, sizeof(int));
int nChannels = pImage->ChannelCount();
f.write((char *) &nChannels, sizeof(int));
int pixelSize = pImage->BytesPerPixel();
f.write((char *) &pixelSize, sizeof(int));
int fmt = pImage->Format();
f.write((char *) &fmt, sizeof(int));
int channelOrder = pImage->channelOrder();
f.write((char *) &channelOrder, sizeof(int));
int imageSize = pixelSize * width * height;
char *pData = new char[imageSize];
pImage->getTile(0, 0, width, height, (void *) pData);
f.write(pData, imageSize);
f.close();
delete pData;
return true;
}
return false;
}