Program: gdcm
Module: $RCSfile: gdcmFile.cxx,v $
Language: C++
- Date: $Date: 2005/07/19 15:25:53 $
- Version: $Revision: 1.252 $
+ Date: $Date: 2005/08/29 13:05:01 $
+ Version: $Revision: 1.265 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
// as the Z coordinate,
// 0. for all the coordinates if nothing is found
//
-// Image Position (Patient) (0020,0032) What is it used for?
+// Image Position (Patient) (0020,0032) VM=3 What is it used for?
// -->
// The attribute Patient Orientation (0020,0020) from the General Image Module
// is of type 2C and has the condition Required if image does not require
// Image Orientation (0020,0037) and Image Position (0020,0032).
-// However, if the image does require the attributes Image Orientation (0020,0037)
-// and Image Position (0020,0032) then attribute Patient Orientation (0020,0020)
-// should not be present in the images.
+// However, if the image does require the attributes
+// - Image Orientation (Patient) (0020,0037), VM=6
+// - Image Position Patient (0020,0032), VM=3
+// then attribute Patient Orientation (0020,0020) should not be present
+// in the images.
//
// Remember also :
// Patient Position (0018,5100) values : HFP = Head First-Prone
// FFDL = Feet First-Decubitus Left
// FFP = Feet First-Prone
// FFS = Feet First-Supine
+// can also find SEMIERECT
+// SUPINE
// CS 2 Patient Orientation (0020 0020)
// When the coordinates of the image
-// are always present, this field is almost never used
+// are always present, this field is almost never used.
+// Better we don't tust it too much ...
+// Found Values are : L\P
+// L\FP
+// P\F
+// L\F
+// P\FR
+// R\F
+//
+// (0020|0037) [Image Orientation (Patient)] [1\0\0\0\1\0 ]
+
+
// ---------------------------------------------------------------
//
#include "gdcmFile.h"
namespace gdcm
{
+
//-----------------------------------------------------------------------------
// Constructor / Destructor
* @param iop adress of the (6)float array to receive values
* @return cosines of image orientation patient
*/
-void File::GetImageOrientationPatient( float iop[6] )
+bool File::GetImageOrientationPatient( float iop[6] )
{
std::string strImOriPat;
//iop is supposed to be float[6]
&iop[0], &iop[1], &iop[2], &iop[3], &iop[4], &iop[5]) != 6 )
{
gdcmWarningMacro( "Wrong Image Orientation Patient (0020,0037). Less than 6 values were found." );
+ return false;
}
}
//For ACR-NEMA
&iop[0], &iop[1], &iop[2], &iop[3], &iop[4], &iop[5]) != 6 )
{
gdcmWarningMacro( "wrong Image Orientation Patient (0020,0035). Less than 6 values were found." );
+ return false;
}
}
+ return true;
}
/**
/**
* \brief Retrieve the number of Bits Allocated
- * (8, 12 -compacted ACR-NEMA files-, 16, ...)
- * @return The encountered number of Bits Allocated, 0 by default.
+ * (8, 12 -compacted ACR-NEMA files-, 16, 24 -old RGB ACR-NEMA files-,)
+ * @return The encountered Number of Bits Allocated, 0 by default.
* 0 means the file is NOT USABLE. The caller has to check it !
*/
int File::GetBitsAllocated()
}
else if ( bitsAlloc == "24" )
{
- // (in order no to be messed up
- bitsAlloc = "8"; // by old RGB images)
+ // (in order no to be messed up by old RGB images)
+ bitsAlloc = "8";
}
std::string sign = GetEntryValue(0x0028, 0x0103);//"Pixel Representation"
el.Group = group;
el.Elem = elem;
el.Value = value;
- AnonymizeList.push_back(el);
+ UserAnonymizeList.push_back(el);
}
/**
uint32_t lgth;
uint32_t valLgth = 0;
std::string *spaces;
- for (ListElements::iterator it = AnonymizeList.begin();
- it != AnonymizeList.end();
+ for (ListElements::iterator it = UserAnonymizeList.begin();
+ it != UserAnonymizeList.end();
++it)
{
d = GetDocEntry( (*it).Group, (*it).Elem);
if ( d == NULL)
continue;
- if ( dynamic_cast<BinEntry *>(d)
- || dynamic_cast<SeqEntry *>(d) )
+ if ( dynamic_cast<SeqEntry *>(d) )
+ {
+ gdcmWarningMacro( "You cannot 'Anonymize' a SeqEntry ");
continue;
+ }
offset = d->GetOffset();
lgth = d->GetLength();
/**
* \brief anonymize a File (remove Patient's personal info passed with
* AddAnonymizeElement()
+ * \note You cannot Anonymize a BinEntry (to be fixed)
*/
bool File::AnonymizeFile()
{
// If Anonymisation list is empty, let's perform some basic anonymization
- if ( AnonymizeList.begin() == AnonymizeList.end() )
+ if ( UserAnonymizeList.begin() == UserAnonymizeList.end() )
{
// If exist, replace by spaces
SetValEntry (" ",0x0010, 0x2154); // Telephone
}
else
{
- SetValEntry("anonymised", 0x0010, 0x0010);
+ SetValEntry("anonymized", 0x0010, 0x0010);
}
}
}
else
{
gdcm::DocEntry *d;
- for (ListElements::iterator it = AnonymizeList.begin();
- it != AnonymizeList.end();
+ for (ListElements::iterator it = UserAnonymizeList.begin();
+ it != UserAnonymizeList.end();
++it)
{
d = GetDocEntry( (*it).Group, (*it).Elem);
if ( d == NULL)
continue;
- if ( dynamic_cast<BinEntry *>(d)
- || dynamic_cast<SeqEntry *>(d) )
+ if ( dynamic_cast<SeqEntry *>(d) )
+ {
+ gdcmWarningMacro( "You cannot 'Anonymize' a SeqEntry ");
continue;
+ }
- SetValEntry ((*it).Value, (*it).Group, (*it).Elem);
+ if ( dynamic_cast<BinEntry *>(d) )
+ {
+ gdcmWarningMacro( "To 'Anonymize' a BinEntry, better use AnonymizeNoLoad (FIXME) ");
+ continue;
+ }
+ else
+ SetValEntry ((*it).Value, (*it).Group, (*it).Elem);
}
}
}
// These are the deprecated method that one day should be removed (after the next release)
+
#ifndef GDCM_LEGACY_REMOVE
/**
- * \brief Constructor
+ * \brief Constructor (DEPRECATED : temporaryly kept not to break the API)
* @param filename name of the file whose header we want to analyze
- * @deprecated do not use anymore
+ * @deprecated do not use any longer
*/
File::File( std::string const &filename )
:Document( )
RLEInfo = new RLEFramesInfo;
JPEGInfo = new JPEGFragmentsInfo;
- Load( filename ); // gdcm::Document is first Loaded, then the 'File part'
+ SetFileName( filename );
+ Load( ); // gdcm::Document is first Loaded, then the 'File part'
}
/**
- * \brief Loader. (DEPRECATED : not to break the API)
+ * \brief Loader. (DEPRECATED : temporaryly kept not to break the API)
* @param fileName file to be open for parsing
* @return false if file cannot be open or no swap info was found,
* or no tag was found.
- * @deprecated Use the Load() function instead
+ * @deprecated Use the Load() [ + SetLoadMode() ] + SetFileName() functions instead
*/
bool File::Load( std::string const &fileName )
{