1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "gdcmImageApplyLookupTable.h"
namespace gdcm
{
bool ImageApplyLookupTable::Apply()
{
Output = Input;
const Bitmap &image = *Input;
PhotometricInterpretation pi = image.GetPhotometricInterpretation();
if( pi != PhotometricInterpretation::PALETTE_COLOR )
{
gdcmDebugMacro( "Image is not palettized" );
return false;
}
const gdcm::LookupTable &lut = image.GetLUT();
int bitsample = lut.GetBitSample();
assert( bitsample );
(void)bitsample;//warning removal
//const DataElement& pixeldata = image.GetDataElement();
//const ByteValue *bv = pixeldata.GetByteValue();
//const char *p = bv->GetPointer();
//std::istringstream is;
//is.str( std::string( p, p + bv->GetLength() ) );
unsigned long len = image.GetBufferLength();
char *p = new char[len];
image.GetBuffer( p );
std::stringstream is;
is.write( p, len );
delete[] p;
std::ostringstream os;
lut.Decode(is, os);
DataElement &de = Output->GetDataElement();
std::string str = os.str();
VL::Type strSize = (VL::Type)str.size();
de.SetByteValue( str.c_str(), strSize);
Output->GetLUT().Clear();
Output->SetPhotometricInterpretation( PhotometricInterpretation::RGB );
Output->GetPixelFormat().SetSamplesPerPixel( 3 );
Output->SetPlanarConfiguration( 0 ); // FIXME OT-PAL-8-face.dcm has a PlanarConfiguration while being PALETTE COLOR...
const gdcm::TransferSyntax &ts = image.GetTransferSyntax();
//assert( ts == TransferSyntax::RLELossless );
if( ts.IsExplicit() )
{
Output->SetTransferSyntax( TransferSyntax::ExplicitVRLittleEndian );
}
else
{
assert( ts.IsImplicit() );
Output->SetTransferSyntax( TransferSyntax::ImplicitVRLittleEndian );
}
bool success = true;
return success;
}
} // end namespace gdcm
|