]> Creatis software - clitk.git/blob - vv/vvImageWriter.txx
c1585465621ae052dc48be82c16a2cd23d836110
[clitk.git] / vv / vvImageWriter.txx
1 #ifndef vvImageWriter_TXX
2 #define vvImageWriter_TXX
3 #include <itkImageFileWriter.h>
4 #include "vvToITK.h"
5
6 //====================================================================
7 template<unsigned int VImageDimension>
8 void vvImageWriter::UpdateWithDim(std::string OutputPixelType)
9 {
10     if (OutputPixelType == "short")
11     {
12         UpdateWithDimAndOutputPixelType<short,VImageDimension>();
13     }
14     else if (OutputPixelType == "unsigned short")
15     {
16         UpdateWithDimAndOutputPixelType<unsigned short,VImageDimension>();
17     }
18     else if (OutputPixelType == "unsigned_short")
19     {
20         UpdateWithDimAndOutputPixelType<unsigned short,VImageDimension>();
21     }
22     else if (OutputPixelType == "char")
23     {
24         UpdateWithDimAndOutputPixelType<char,VImageDimension>();
25     }
26     else if (OutputPixelType == "unsigned_char")
27     {
28         UpdateWithDimAndOutputPixelType<unsigned char,VImageDimension>();
29     }
30     else if (OutputPixelType == "int")
31     {
32         UpdateWithDimAndOutputPixelType<int,VImageDimension>();
33     }
34     else if (OutputPixelType == "double")
35     {
36         UpdateWithDimAndOutputPixelType<double,VImageDimension>();
37     }
38     else if (OutputPixelType == "float")
39     {
40         UpdateWithDimAndOutputPixelType<float,VImageDimension>();
41     }
42     else
43     {
44         std::cerr << "Error, output pixel type : \"" << OutputPixelType << "\" unknown !" << std::endl;
45     }
46 }
47 //====================================================================
48
49 //====================================================================
50 template<class OutputPixelType, unsigned int VImageDimension>
51 void vvImageWriter::UpdateWithDimAndOutputPixelType()
52 {
53     //Create the writer
54     typedef itk::Image< OutputPixelType, VImageDimension > OutputImageType;
55     typedef itk::ImageFileWriter<OutputImageType> WriterType;
56     typename WriterType::Pointer writer = WriterType::New();
57     writer->SetFileName(mOutputFilename);
58     writer->SetInput(vvImageToITK<OutputImageType>(mImage));
59     if (mUseAnObserver) {
60         writer->AddObserver(itk::ProgressEvent(), mObserver);
61     }
62     try {
63         writer->Update();
64     }
65     catch ( itk::ExceptionObject & err ) {
66         std::cerr << "Error while reading " << mOutputFilename.c_str()
67                   << " " << err << std::endl;
68         std::stringstream error;
69         error << err;
70         mLastError = error.str();
71         return;
72     }
73 }
74 //====================================================================
75
76 #endif /* end #define vvImageWriter_TXX */
77