Program: gdcm
Module: $RCSfile: gdcmFile.cxx,v $
Language: C++
- Date: $Date: 2005/01/28 09:37:29 $
- Version: $Revision: 1.203 $
+ Date: $Date: 2005/02/02 10:02:17 $
+ Version: $Revision: 1.207 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
* \brief Constructor
* @param filename name of the file whose header we want to analyze
*/
-File::File( std::string const &filename ):
- Document( filename )
+File::File( std::string const &filename )
+ :Document( filename )
{
RLEInfo = new RLEFramesInfo;
JPEGInfo = new JPEGFragmentsInfo;
ComputeJPEGFragmentInfo();
CloseFile();
- // Change the created dict entry
- std::string PixelVR;
- // 8 bits allocated is a 'O Bytes' , as well as 24 (old ACR-NEMA RGB)
- // more than 8 (i.e 12, 16) is a 'O Words'
- if ( GetBitsAllocated() == 8 || GetBitsAllocated() == 24 )
- PixelVR = "OB";
- else
- PixelVR = "OW";
+ // Create a new BinEntry to change the the DictEntry
+ // The changed DictEntry will have
+ // - a correct PixelVR OB or OW)
+ // - a VM to "PXL"
+ // - the name to "Pixel Data"
+ BinEntry *oldEntry = dynamic_cast<BinEntry *>(entry);
+ if(oldEntry)
+ {
+ std::string PixelVR;
+ // 8 bits allocated is a 'O Bytes' , as well as 24 (old ACR-NEMA RGB)
+ // more than 8 (i.e 12, 16) is a 'O Words'
+ if ( GetBitsAllocated() == 8 || GetBitsAllocated() == 24 )
+ PixelVR = "OB";
+ else
+ PixelVR = "OW";
+
+ // Change only made if usefull
+ if( PixelVR != oldEntry->GetVR() )
+ {
+ DictEntry* newDict = NewVirtualDictEntry(GrPixel,NumPixel,
+ PixelVR,"1","Pixel Data");
- DictEntry* newEntry = NewVirtualDictEntry(GrPixel, NumPixel,
- PixelVR, "PXL", "Pixel Data");
+ BinEntry *newEntry = new BinEntry(newDict);
+ newEntry->Copy(entry);
+ newEntry->SetBinArea(oldEntry->GetBinArea(),oldEntry->IsSelfArea());
+ oldEntry->SetSelfArea(false);
- // friend class hunting : should we *create* a new entry,
- // instead of modifying its DictEntry,in order not to use 'friend' ?
- entry->SetDictEntry( newEntry );
+ RemoveEntry(oldEntry);
+ AddEntry(newEntry);
+ }
+ }
}
}
delete JPEGInfo;
}
+//-----------------------------------------------------------------------------
+// Public
/**
* \brief Performs some consistency checking on various 'File related'
* (as opposed to 'DicomDir related') entries
return false;
}
+ // Entry : 0002|0000 = group length -> recalculated
+ ValEntry *e0002 = GetValEntry(0x0002,0x0000);
+ if( e0002 )
+ {
+ std::ostringstream sLen;
+ sLen << ComputeGroup0002Length(filetype);
+ e0002->SetValue(sLen.str());
+ }
+
// Bits Allocated
if ( GetEntryValue(0x0028,0x0100) == "12")
{
SetValEntry("16", 0x0028,0x0100);
}
- /// \todo correct 'Pixel group' Length if necessary
-
int i_lgPix = GetEntryLength(GrPixel, NumPixel);
if (i_lgPix != -2)
{
// (or in future gdcmPixelData class)
// Drop Palette Color, if necessary
-
if ( GetEntryValue(0x0028,0x0002).c_str()[0] == '3' )
{
// if SamplesPerPixel = 3, sure we don't need any LUT !
BinEntry *b = GetBinEntry(GrPixel,NumPixel);
if ( GetPixelSize() == 16 )
{
- uint16_t *im16 = (uint16_t*)b->GetBinArea();
+ uint16_t *im16 = (uint16_t *)b->GetBinArea();
int lgr = b->GetLength();
for( int i = 0; i < lgr / 2; i++ )
{
#endif //GDCM_WORDS_BIGENDIAN
*/
- Document::WriteContent(fp,filetype);
+ Document::WriteContent(fp, filetype);
/*
#ifdef GDCM_WORDS_BIGENDIAN
return true;
}
-//-----------------------------------------------------------------------------
-// Print
-
-
-//-----------------------------------------------------------------------------
-// Public
-
/**
* \brief This predicate, based on hopefully reasonable heuristics,
* decides whether or not the current File was properly parsed
*/
int File::GetSamplesPerPixel()
{
- const std::string& strSize = GetEntryValue(0x0028,0x0002);
+ const std::string &strSize = GetEntryValue(0x0028,0x0002);
if ( strSize == GDCM_UNFOUND )
{
gdcmVerboseMacro( "(0028,0002) is supposed to be mandatory");
*/
bool File::IsMonochrome()
{
- const std::string& PhotometricInterp = GetEntryValue( 0x0028, 0x0004 );
+ const std::string &PhotometricInterp = GetEntryValue( 0x0028, 0x0004 );
if ( Util::DicomStringEqual(PhotometricInterp, "MONOCHROME1")
|| Util::DicomStringEqual(PhotometricInterp, "MONOCHROME2") )
{
}
//-----------------------------------------------------------------------------
+// Print
+//-----------------------------------------------------------------------------
} // end namespace gdcm