X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkImageCommon.cxx;h=4c66654cc11ad1e1e2ddd271c2910bc2a97ad004;hb=573d80d0f7a17607d2ee883c21c940c0ba020282;hp=cc211993d8abfc42bb14abeefeca56e3772b94ac;hpb=9284f78523ef4469d086d04c1bcd791ce00575d1;p=clitk.git diff --git a/common/clitkImageCommon.cxx b/common/clitkImageCommon.cxx index cc21199..4c66654 100644 --- a/common/clitkImageCommon.cxx +++ b/common/clitkImageCommon.cxx @@ -1,43 +1,39 @@ -/*------------------------------------------------------------------------= - - Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de - l'Image). All rights reserved. See Doc/License.txt or - http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. - +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.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 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - - ------------------------------------------------------------------------=*/ + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - 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 - * @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(); } @@ -45,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(); @@ -63,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 p = hreader.GetFile(); + return p; +#else if (verbose) { std::cout << "Reading DICOM <" << filename << ">" << std::endl; } @@ -74,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(); @@ -97,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 inputSize; @@ -111,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) { @@ -125,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) @@ -146,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; @@ -166,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; + } } } }