Program: gdcm
Module: $RCSfile: gdcmFile.cxx,v $
Language: C++
- Date: $Date: 2005/07/24 02:34:41 $
- Version: $Revision: 1.263 $
+ Date: $Date: 2005/09/21 17:16:15 $
+ Version: $Revision: 1.271 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
// in the images.
//
// Remember also :
-// Patient Position (0018,5100) values : HFP = Head First-Prone
-// HFS = Head First-Supine
-// HFDR = Head First-Decubitus Right
-// HFDL = Head First-Decubitus Left
-// FFDR = Feet First-Decubitus Right
-// FFDL = Feet First-Decubitus Left
-// FFP = Feet First-Prone
-// FFS = Feet First-Supine
-// can also find SEMIERECT
-// SUPINE
+// Patient Position (0018,5100) values :
+
+// HFS = Head First-Supine, where increasing (positive axis direction) :
+// X -> to the direction pointed to by the patient's oustretched left arm
+// Y -> to the anterior-to-posterior direction in the patient's body
+// Z -> to the feet-to-head direction in the patient's body
+
+// HFP = Head First-Prone, where increasing (positive axis direction) :
+// X -> to the direction pointed to by the patient's oustretched left arm
+// Y -> to the anterior-to-posterior direction in the patient's body
+// Z -> to the feet-to-head direction in the patient's body
+
+// FFS = Feet First-Supine, where increasing (positive axis direction) :
+// X -> to the direction pointed to by the patient's oustretched left arm
+// Y -> to the anterior-to-posterion direction in the patient's body
+// Z -> to the feet-to-head direction in the patient's body
+
+// FFP = Feet First-Prone, where increasing (positive axis direction) :
+// X -> to the direction pointed to by the patient's oustretched left arm
+// Y -> to the posterior-to-anterior direction in the patient's body
+// Z -> to the feet-to-head direction in the patient's body
+
+// HFDR = Head First-Decubitus Right
+// HFDL = Head First-Decubitus Left
+// FFDR = Feet First-Decubitus Right
+// FFDL = Feet First-Decubitus Left
+
+// we 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.
-// Better we don't tust it too much ...
-// Found Values are : L\P
-// L\FP
-// P\F
-// L\F
-// P\FR
-// R\F
+// When the coordinates of the image
+// are always present, this field is almost never used.
+// Better we don't trust 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"
#include "gdcmJPEGFragmentsInfo.h"
#include <vector>
-#include <stdio.h> //sscanf
+#include <stdio.h> //sscanf
#include <stdlib.h> // for atoi
namespace gdcm
/**
* \brief gets the info from 0020,0037 : Image Orientation Patient
+ * or from 0020 0035 : Image Orientation (RET)
* (needed to organize DICOM files based on their x,y,z position)
* @param iop adress of the (6)float array to receive values
- * @return cosines of image orientation patient
+ * @return true when one of the tag is found
+ * false when nothing is found
*/
bool File::GetImageOrientationPatient( float iop[6] )
{
if ( sscanf( strImOriPat.c_str(), "%f \\ %f \\%f \\%f \\%f \\%f ",
&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." );
+ gdcmWarningMacro( "Wrong Image Orientation Patient (0020,0037)."
+ << " Less than 6 values were found." );
return false;
}
}
if ( sscanf( strImOriPat.c_str(), "%f \\ %f \\%f \\%f \\%f \\%f ",
&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." );
+ gdcmWarningMacro( "wrong Image Orientation Patient (0020,0035). "
+ << "Less than 6 values were found." );
return false;
}
}
return true;
}
+
+
/**
* \brief Retrieve the number of Bits Stored (actually used)
* (as opposed to number of Bits Allocated)
/**
* \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<SeqEntry *>(d) )
- {
- gdcmWarningMacro( "You cannot 'Anonymize a SeqEntry ");
- continue;
- }
+ if ( dynamic_cast<SeqEntry *>(d) )
+ {
+ gdcmWarningMacro( "You cannot 'Anonymize' a SeqEntry ");
+ continue;
+ }
offset = d->GetOffset();
lgth = d->GetLength();
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 ( e0000 )
{
std::ostringstream sLen;
- sLen << ComputeGroup0002Length(writetype);
+ sLen << ComputeGroup0002Length( );
e0000->SetValue(sLen.str());
}
itemTagGroup = ReadInt16();
itemTagElem = ReadInt16();
}
- catch ( FormatError e )
+ catch ( FormatError /*e*/ )
{
//std::cerr << e << std::endl;
return false;