#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 )
{
}
{
if (!pImage || !sFileName.
size())
return false;
{
char magicString[256];
memset(magicString, '\0', 256);
if (
magic !=
"MBRAWEXAMPLE")
{
return false;
}
f.read((
char *) &width,
sizeof(
int));
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));
f.read(pData, imageSize);
pImage->
Create(width, height, nChannels, fmt,
false, channelOrder);
pImage->
setTile(0, 0, width, height, pData);
delete [] pData;
return true;
}
return false;
}
bool ImageIOHandlerRAW::Export(
const QString &sFileName, Image *pImage)
{
if (!pImage || !sFileName.
size())
return false;
{
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;
pImage->getTile(0, 0, width, height, (void *) pData);
f.write(pData, imageSize);
delete [] pData;
return true;
}
return false;
}