<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7655.8">
<TITLE>Problem with DicomImageReadWrite.cxx</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi<BR>
I have a problem with the example: Examples/IO/DicomImageReadWrite.cxx of the ItkSoftwareGuide<BR>
<BR>
I don't understand why when I run it (with this command ./DicomImageReadWrite carotid.dcm out1.dcm out2.dcm out3.dcm) with a dicom image as input (carotid.dcm) my output is that:<BR>
<BR>
exception in file writer [1]<BR>
<BR>
itk::ExceptionObject (0xa0c25a8)<BR>
Location: &quot;virtual void itk::GDCMImageIO::Write(const void*)&quot;<BR>
File: /usr/local/itk/InsightToolkit-3.16.0/Code/IO/itkGDCMImageIO.cxx<BR>
Line: 1827<BR>
Description: itk::ERROR: GDCMImageIO(0xa0c11a0): Cannot write the requested <A HREF="file:out1.dcm">file:out1.dcm</A><BR>
Reason: Success<BR>
<BR>
<BR>
My code is:<BR>
<BR>
<BR>
#if defined(_MSC_VER)<BR>
#pragma warning ( disable : 4786 )<BR>
#endif<BR>
<BR>
#ifdef __BORLANDC__<BR>
#define ITK_LEAN_AND_MEAN<BR>
#endif<BR>
<BR>
#include &quot;itkImageFileReader.h&quot;<BR>
#include &quot;itkImageFileWriter.h&quot;<BR>
#include &quot;itkRescaleIntensityImageFilter.h&quot;<BR>
#include &quot;itkGDCMImageIO.h&quot;<BR>
<BR>
#include &lt;list&gt;<BR>
#include &lt;fstream&gt;<BR>
<BR>
int main( int argc, char* argv[] )<BR>
{<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Verify the number of parameters in the command line<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( argc &lt; 5 )<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; argv[0] &lt;&lt; &quot; DicomImage OutputDicomImage &quot;;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; OutputImage RescaleDicomImage\n&quot;;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Declare the pixel type and image dimension, and use them for<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // instantiating the image type to be read.<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef signed short InputPixelType;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const unsigned int&nbsp;&nbsp; InputDimension = 2;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Instantiate the type of the reader, create one,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // and set the filename of the image to be read.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::ImageFileReader&lt; InputImageType &gt; ReaderType;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReaderType::Pointer reader = ReaderType::New();<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;SetFileName( argv[1] );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // The GDCMImageIO object is constructed here and connected to<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // the ImageFileReader.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::GDCMImageIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIOType::Pointer gdcmImageIO = ImageIOType::New();<BR>
&nbsp;<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;SetImageIO( gdcmImageIO );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Trigger the reading process by invoking the Update() method.&nbsp;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;Update();<BR>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (itk::ExceptionObject &amp; e)<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;exception in file reader &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<BR>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Instantiate an ImageFileWriter type.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::ImageFileWriter&lt; InputImageType &gt;&nbsp; Writer1Type;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer1Type::Pointer writer1 = Writer1Type::New();<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer1-&gt;SetFileName( argv[2] );<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer1-&gt;SetInput( reader-&gt;GetOutput() );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Set the proper image IO (GDCMImageIO) to the writer filter since the input<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; DICOM dictionary is being passed along the writing process.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer1-&gt;SetImageIO( gdcmImageIO );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // The writing process is triggered by invoking the Update() method.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer1-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (itk::ExceptionObject &amp; e)<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;exception in file writer [1] &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Rescale the image into a rescaled image one using the rescale intensity image filter.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; For this purpose we use a better suited pixel type: unsigned char instead of signed<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; short.&nbsp; The minimum and maximum values of the output image are explicitly defined in<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; the rescaling filter.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef unsigned char WritePixelType;<BR>
&nbsp;<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::Image&lt; WritePixelType, 2 &gt; WriteImageType;<BR>
&nbsp;<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::RescaleIntensityImageFilter&lt; InputImageType, WriteImageType &gt; RescaleFilterType;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RescaleFilterType::Pointer rescaler = RescaleFilterType::New();<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rescaler-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rescaler-&gt;SetOutputMaximum( 255 );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create a second writer object that will save the rescaled image into a<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // file. This time not in DICOM format.<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::ImageFileWriter&lt; WriteImageType &gt;&nbsp; Writer2Type;<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer2Type::Pointer writer2 = Writer2Type::New();<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer2-&gt;SetFileName( argv[3] );<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rescaler-&gt;SetInput( reader-&gt;GetOutput() );<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer2-&gt;SetInput( rescaler-&gt;GetOutput() );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // The writer can be executed by invoking the Update() method from inside a<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // try/catch block.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer2-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (itk::ExceptionObject &amp; e)<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;exception in file writer [2]&quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Save the same rescaled image into a file in DICOM format.<BR>
<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef itk::ImageFileWriter&lt; WriteImageType &gt;&nbsp; Writer3Type;<BR>
&nbsp;<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer3Type::Pointer writer3 = Writer3Type::New();<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer3-&gt;SetFileName( argv[4] );<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer3-&gt;SetInput( rescaler-&gt;GetOutput() );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Explicitly set the proper image IO (GDCMImageIO).<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer3-&gt;UseInputMetaDataDictionaryOff ();<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer3-&gt;SetImageIO( gdcmImageIO );<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Trigger the execution of the DICOM writer by invoking the<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Update() method from inside a try/catch block.<BR>
<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer3-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (itk::ExceptionObject &amp; e)<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception in file writer [3]&quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; e &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<BR>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EXIT_SUCCESS;<BR>
<BR>
}<BR>
<BR>
<BR>
Thank you very much<BR>
Edoardo</FONT>
</P>

</BODY>
</HTML>