X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FvvImageWriter.txx;h=81e45ee03b91344b0f60f7829b1aa0c2ac5997bd;hb=refs%2Fheads%2FOpenGL2;hp=66e9d0300d4420332853095deb97320753960549;hpb=62c20109b437bef1b9df091dfe7728a0fdf98bbc;p=clitk.git diff --git a/common/vvImageWriter.txx b/common/vvImageWriter.txx index 66e9d03..81e45ee 100644 --- a/common/vvImageWriter.txx +++ b/common/vvImageWriter.txx @@ -3,7 +3,7 @@ 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 @@ -14,13 +14,13 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ +===========================================================================**/ #ifndef vvImageWriter_TXX #define vvImageWriter_TXX #include +#include #include "vvToITK.h" -#include "clitkDD.h" //==================================================================== template @@ -38,6 +38,8 @@ void vvImageWriter::UpdateWithDim(std::string OutputPixelType) UpdateWithDimAndOutputPixelType(); } else if (OutputPixelType == "int") { UpdateWithDimAndOutputPixelType(); + } else if (OutputPixelType == "unsigned_int") { + UpdateWithDimAndOutputPixelType(); } else if (OutputPixelType == "double") { UpdateWithDimAndOutputPixelType(); } else if (OutputPixelType == "float") { @@ -52,12 +54,51 @@ void vvImageWriter::UpdateWithDim(std::string OutputPixelType) template void vvImageWriter::UpdateWithDimAndOutputPixelType() { - //Create the writer + // The ITK image typedef itk::Image< OutputPixelType, VImageDimension > OutputImageType; + typename OutputImageType::ConstPointer itkimg = vvImageToITK(mImage); + + //Create the writer typedef itk::ImageFileWriter WriterType; typename WriterType::Pointer writer = WriterType::New(); writer->SetFileName(mOutputFilename); - writer->SetInput(vvImageToITK(mImage)); + + //Change information if it must transformation must be saved + typedef itk::ChangeInformationImageFilter ChangeInfoType; + typename ChangeInfoType::Pointer info = ChangeInfoType::New(); + if(mSaveTransform) { + // Set pipeline + info->SetInput(itkimg); + writer->SetInput(info->GetOutput()); + + // Inverse vv matrix + itk::Matrix trans; + for(int i=0; i<4; i++) + for(int j=0; j<4; j++) + // TODO SR and BP: check on the list of transforms and not the first only + trans[i][j] = mImage->GetTransform()[0]->GetMatrix()->GetElement(i,j); + trans = trans.GetInverse(); + + // Direction + typename ChangeInfoType::DirectionType direction; + for(unsigned int i=0; iSetOutputDirection(direction); + info->ChangeDirectionOn(); + + // Origin + typename ChangeInfoType::PointType origin = itkimg->GetOrigin(); + origin = direction * origin; + for(unsigned int i=0; iSetOutputOrigin(origin); + info->ChangeOriginOn(); + } + else + writer->SetInput(itkimg); + + if (mUseAnObserver) { writer->AddObserver(itk::ProgressEvent(), mObserver); }