X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=common%2Fold%2FclitkIOCommon.cxx;fp=common%2Fold%2FclitkIOCommon.cxx;h=be69d374edfa5caad8f08db2a7b1c689a99d37f4;hb=9284f78523ef4469d086d04c1bcd791ce00575d1;hp=0000000000000000000000000000000000000000;hpb=e534754cde3aee05927b1ca4aa6962dc05ee0322;p=clitk.git diff --git a/common/old/clitkIOCommon.cxx b/common/old/clitkIOCommon.cxx new file mode 100644 index 0000000..be69d37 --- /dev/null +++ b/common/old/clitkIOCommon.cxx @@ -0,0 +1,165 @@ +/*========================================================================= + +Program: clitk +Language: C++ + +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. + +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. + +=========================================================================*/ + +#ifndef CLITKIOCOMMON_CXX +#define CLITKIOCOMMON_CXX + +/** + ================================================= + * @file clitkIOCommon.cxx + * @author David Sarrut + * @date 18 May 2006 11:42:37 + * + * @brief + * + * + =================================================*/ + +// clitk include +#include "clitkImageCommon.h" +#include + +//==================================================================== +// Open a file for reading +void clitk::openFileForReading(std::ifstream & is, const std::string & filename) { + is.open(filename.c_str(), std::ios::in); + if ( is.fail() ) { + itkGenericExceptionMacro(<< "Could not open file (for reading): " << filename); + } +} +//==================================================================== + +//==================================================================== +// Open a file for writing +void clitk::openFileForWriting(std::ofstream & os, const std::string & filename) { + os.open(filename.c_str(), std::ios::out); + if ( os.fail() ) { + itkGenericExceptionMacro(<< "Could not open file (for writing): " << filename); + } +} +//==================================================================== + +//==================================================================== +// Read a dicom header +gdcm::File * clitk::readDicomHeader(const std::string & filename, + const bool verbose) { + if (verbose) { + std::cout << "Reading DICOM <" << filename << ">" << std::endl; + } + gdcm::File *header = new gdcm::File(); + header->SetFileName(filename); + header->SetMaxSizeLoadEntry(16384); // required ? + header->Load(); + return header; +} +//==================================================================== + +//==================================================================== +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; + reader->SetFileName(filename); + reader->ReadImageInformation(); + return reader; +} +//==================================================================== + +//==================================================================== +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; + std::vector inputSpacing; + inputSize.resize(dim); + inputSpacing.resize(dim); + for(unsigned int i=0; iGetSpacing(i); + inputSize[i] = header->GetDimensions(i); + } + int pixelSize = + clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType())); + unsigned int nbOfComponents = header->GetNumberOfComponents(); + if (level == 0) { + os << dim << "D "; + if (nbOfComponents !=1) os << nbOfComponents << "x" << pixelTypeName; + else os << pixelTypeName; + os << " "; + for(unsigned int i=0; i< dim-1; i++) + os << inputSize[i] << "x"; + os << inputSize[dim-1] + << " "; + for(unsigned int i=0; i< dim-1; i++) + os << inputSpacing[i] << "x"; + os << inputSpacing[dim-1]; + } + else { + os << "Dim = " << dim << "D" << std::endl; + os << "PixelType = " << pixelTypeName << std::endl; + if (nbOfComponents > 1) + os << "Vector = " << nbOfComponents << std::endl; + os << "Size = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSize[i] << " "; + } + os << std::endl; + os << "Spacing = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSpacing[i] << " "; + } + os << std::endl; + if (level > 1) { + os << "# voxels = " << header->GetImageSizeInPixels() << std::endl; + os << "Size (mm) = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSize[i]*inputSpacing[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; + } + os << vol << " cc" << std::endl; + int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents; + double memKb = (double)mem/1024.0; + 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; + 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; + } + } + } + } +} +//==================================================================== + +#endif /* end #define CLITKIO_CXX */ +