]> Creatis software - clitk.git/blobdiff - common/clitkImageCommon.cxx
changes in license header
[clitk.git] / common / clitkImageCommon.cxx
index 45dfa0d319909fa6dae98f6d287c098059cf5bf2..4c66654cc11ad1e1e2ddd271c2910bc2a97ad004 100644 (file)
@@ -1,9 +1,9 @@
 /*=========================================================================
   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-  Authors belong to: 
+  Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+  ===========================================================================**/
+
 #ifndef CLITKIMAGECOMMON_CXX
 #define CLITKIMAGECOMMON_CXX
-/**
-   ------------------------------------------------=
-   * @file   clitkImageCommon.cxx
-   * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
-   * @date   02 Oct 2007 14:30:47
-   * 
-   * @brief  
-   * 
-   * 
-   ------------------------------------------------=*/
 
 #include "clitkImageCommon.h"
+#include "clitkCommon.h"
 
 //--------------------------------------------------------------------
-void clitk::ReadImageDimensionAndPixelType(const std::string & filename, 
-                                          int & dimension, 
-                                          std::string & pixeType) {
-  itk::ImageIOBase::Pointer genericReader = 
+void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
+                                           int & dimension,
+                                           std::string & pixeType)
+{
+  itk::ImageIOBase::Pointer genericReader =
     itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
   if (!genericReader) {
-    std::cerr << "Image file format unknown while reading " << filename << std::endl;
-    exit(0);
+    clitkExceptionMacro("Image file format unknown while reading file <" << filename << ">");
   }
   genericReader->SetFileName(filename.c_str());
-  genericReader->ReadImageInformation();  
+  genericReader->ReadImageInformation();
   pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
   dimension = genericReader->GetNumberOfDimensions();
 }
@@ -49,17 +41,17 @@ void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
 
 
 //--------------------------------------------------------------------
-void clitk::ReadImageDimensionAndPixelType(const std::string & filename, 
-                                          int & dimension, 
-                                          std::string & pixeType, int & components) {
-  itk::ImageIOBase::Pointer genericReader = 
+void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
+                                           int & dimension,
+                                           std::string & pixeType, int & components)
+{
+  itk::ImageIOBase::Pointer genericReader =
     itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
   if (!genericReader) {
-    std::cerr << "Image file format unknown while reading " << filename << std::endl;
-    exit(0);
+    clitkExceptionMacro("Image file format unknown while reading file <" << filename << ">");
   }
   genericReader->SetFileName(filename.c_str());
-  genericReader->ReadImageInformation();  
+  genericReader->ReadImageInformation();
   pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType());
   dimension = genericReader->GetNumberOfDimensions();
   components= genericReader->GetNumberOfComponents();
@@ -67,9 +59,17 @@ void clitk::ReadImageDimensionAndPixelType(const std::string & filename,
 //--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
-// Read a dicom header  
-gdcm::File * clitk::readDicomHeader(const std::string & filename, 
-                                   const bool verbose) {
+// Read a dicom header
+gdcm::File * clitk::readDicomHeader(const std::string & filename,
+                                    const bool verbose)
+{
+#if GDCM_MAJOR_VERSION == 2
+  gdcm::Reader hreader;
+  hreader.SetFileName(filename.c_str());
+  hreader.Read();
+  gdcm::SmartPointer<gdcm::File> p = hreader.GetFile();
+  return p;
+#else
   if (verbose) {
     std::cout << "Reading DICOM <" << filename << ">" << std::endl;
   }
@@ -78,21 +78,19 @@ gdcm::File * clitk::readDicomHeader(const std::string & filename,
   header->SetMaxSizeLoadEntry(16384); // required ?
   header->Load();
   return header;
+#endif
 }
-//--------------------------------------------------------------------
+///--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
-itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename, bool exit_on_error) {
+itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename, bool exit_on_error)
+{
   itk::ImageIOBase::Pointer reader =
     itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode);
   if (!reader) {
-      if (exit_on_error) //default behavior for tools who don't handle the problem
-      {
-          std::cerr << "Error reading file " << filename << ", exiting immediately" << std::endl;
-          std::exit(-1);
-      }
-      else
-          return NULL;
+    if (exit_on_error) { //default behavior for tools who don't handle the problem
+      clitkExceptionMacro("Error reading file " << filename << ", exiting immediately");
+    } else return NULL;
   }
   reader->SetFileName(filename);
   reader->ReadImageInformation();
@@ -101,7 +99,8 @@ itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename, b
 //--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
-void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level) {
+void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level)
+{
   unsigned int dim = header->GetNumberOfDimensions();
   std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
   std::vector<int> inputSize;
@@ -115,7 +114,7 @@ void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os
     inputSize[i] = header->GetDimensions(i);
     inputOrigin[i] = header->GetOrigin(i);
   }
-  int pixelSize = 
+  int pixelSize =
     clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType()));
   unsigned int nbOfComponents = header->GetNumberOfComponents();
   if (level == 0) {
@@ -129,9 +128,13 @@ void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os
        << "  ";
     for(unsigned int i=0; i< dim-1; i++)
       os << inputSpacing[i] << "x";
-    os << inputSpacing[dim-1];
-  }
-  else {
+    os << inputSpacing[dim-1]
+       << "  ";
+    for(unsigned int i=0; i< dim-1; i++)
+      os << inputOrigin[i] << "x";
+    os << inputOrigin[dim-1] << " ";
+    os << header->GetImageSizeInPixels() << " ";
+  } else {
     os << "Dim       = " << dim << "D" << std::endl;
     os << "PixelType = " << pixelTypeName << std::endl;
     if (nbOfComponents > 1)
@@ -150,19 +153,19 @@ void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os
       os << "# voxels  = " << header->GetImageSizeInPixels() << std::endl;
       os << "Size (mm) = ";
       for(unsigned int i=0; i< dim; i++) {
-       os << inputSize[i]*inputSpacing[i] << " ";
+        os << inputSize[i]*inputSpacing[i] << " ";
       }
       os << "mm" << std::endl;
       os << "Origin (mm)= ";
       for(unsigned int i=0; i< dim; i++) {
-       os << inputOrigin[i] << " ";
+        os << inputOrigin[i] << " ";
       }
       os << "mm" << std::endl;
 
       os << "Volume    = ";
       double vol=1.0;
       for(unsigned int i=0; i< dim; i++) {
-       vol *= inputSize[i]*inputSpacing[i]/10.0;
+        vol *= inputSize[i]*inputSpacing[i]/10.0;
       }
       os << vol << " cc" << std::endl;
       int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents;
@@ -170,16 +173,16 @@ void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os
       double memMb = (double)mem/1024.0/1024.0;
       double memGb = (double)mem/1024.0/1024.0/1024.0;
       if (lrint(memKb) <= 0)
-       os << "Memory    = " << mem << " bytes" << std::endl;
+        os << "Memory    = " << mem << " bytes" << std::endl;
       else {
-       if (lrint(memMb) <= 0)
-         os << "Memory    = " << memKb << " Kb (" << mem << " bytes)" << std::endl;
-       else {
-         if (lrint(memGb) <= 0)
-           os << "Memory    = " << memMb << " Mb (" << mem << " bytes)" << std::endl;
-         else 
-           os << "Memory     = " << memGb << " Gb (" << mem << " bytes)" << std::endl;
-       }
+        if (lrint(memMb) <= 0)
+          os << "Memory    = " << memKb << " Kb (" << mem << " bytes)" << std::endl;
+        else {
+          if (lrint(memGb) <= 0)
+            os << "Memory    = " << memMb << " Mb (" << mem << " bytes)" << std::endl;
+          else
+            os << "Memory     = " << memGb << " Gb (" << mem << " bytes)" << std::endl;
+        }
       }
     }
   }