#include "gdcmImageReader.h"
#include <QImage>
#include <QImageWriter>
bool ConvertToFormat_RGB888(gdcm::Image const & gimage, char *buffer, QImage* &imageQt)
{
const unsigned int* dimension = gimage.GetDimensions();
unsigned int dimX = dimension[0];
unsigned int dimY = dimension[1];
gimage.GetBuffer(buffer);
if( gimage.GetPhotometricInterpretation() == gdcm::PhotometricInterpretation::RGB )
{
if( gimage.GetPixelFormat() != gdcm::PixelFormat::UINT8 )
{
return false;
}
unsigned char *ubuffer = (unsigned char*)buffer;
imageQt = new QImage(ubuffer, dimX, dimY, QImage::Format_RGB888);
}
else if( gimage.GetPhotometricInterpretation() == gdcm::PhotometricInterpretation::MONOCHROME2 )
{
if( gimage.GetPixelFormat() == gdcm::PixelFormat::UINT8 )
{
unsigned char *ubuffer = new unsigned char[dimX*dimY*3];
unsigned char *pubuffer = ubuffer;
for(int i = 0; i < dimX*dimY; i++)
{
*pubuffer++ = *buffer;
*pubuffer++ = *buffer;
*pubuffer++ = *buffer++;
}
imageQt = new QImage(ubuffer, dimX, dimY, QImage::Format_RGB888);
}
else if( gimage.GetPixelFormat() == gdcm::PixelFormat::INT16 )
{
short *buffer16 = (short*)buffer;
unsigned char *ubuffer = new unsigned char[dimX*dimY*3];
unsigned char *pubuffer = ubuffer;
for(int i = 0; i < dimX*dimY; i++)
{
*pubuffer++ = *buffer16 / 256;
*pubuffer++ = *buffer16 / 256;
*pubuffer++ = *buffer16 / 256;
buffer16++;
}
imageQt = new QImage(ubuffer, dimX, dimY, QImage::Format_RGB888);
}
else
{
std::cerr << "Pixel Format is: " << gimage.GetPixelFormat() << std::endl;
return false;
}
}
else
{
std::cerr << "Unhandled PhotometricInterpretation: " << gimage.GetPhotometricInterpretation() << std::endl;
return false;
}
return true;
}
int main(int argc, char *argv[])
{
if( argc < 2 )
{
return 1;
}
const char *filename = argv[1];
const char *outfilename = argv[2];
gdcm::ImageReader ir;
ir.SetFileName( filename );
if(!ir.Read())
{
return 1;
}
std::cout<<"Getting image from ImageReader..."<<std::endl;
const gdcm::Image &gimage = ir.GetImage();
char *buffer = new char[gimage.GetBufferLength()];
QImage *imageQt = NULL;
if( !ConvertToFormat_RGB888( gimage, buffer, imageQt ) )
{
return 1;
}
QImageWriter writer;
writer.setFormat("png");
writer.setFileName( outfilename );
if( !writer.write( *imageQt ) )
{
return 1;
}
return 0;
}