<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000099">
The function ReadDICOMImage() gets called to test for/read a DICOM
image file.<br>
It has worked consistently for me through ITK versions 1.x through 3.4
when compiled<br>
with MS Visual C++ 6.0.&nbsp; But now, when compiling with MS Visual Studio
v9.0 for<br>
x86 and under Windows Vista, the debugger traps an access violation
from the<br>
destructor ~ImageSource() (located in file itkImageSource.h).<br>
<br>
-----------------------------------------------------------------------------------<br>
<br>
BOOL CImageData::ReadDICOMImage( CString &amp;csFileName, IMAGEPARAMS
&amp;iParam )<br>
{<br>
&nbsp;&nbsp; &nbsp;// First check for a DICOM file.<br>
&nbsp;&nbsp; &nbsp;itk::GDCMImageIO::Pointer gdcmIO = itk::GDCMImageIO::New();<br>
<br>
&nbsp;&nbsp; &nbsp;// This works but commented out to get to 'reader'<br>
&nbsp;&nbsp; &nbsp;//if (!gdcmIO-&gt;CanReadFile((LPCTSTR)csFileName)<br>
&nbsp;&nbsp; &nbsp;//&nbsp;&nbsp; &nbsp;return FALSE;<br>
<br>
&nbsp;&nbsp; &nbsp;typedef signed short&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;PixelType;<br>
&nbsp;&nbsp; &nbsp;// Set dimensions to 3 to have reader return z-value<br>
&nbsp;&nbsp; &nbsp;const&nbsp;&nbsp; &nbsp;UINT&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Dimension = 3;<br>
&nbsp;&nbsp; &nbsp;typedef itk::Image&lt; PixelType, Dimension &gt;&nbsp;&nbsp; &nbsp;ImageType;<br>
&nbsp;&nbsp; &nbsp;typedef itk::ImageFileReader&lt; ImageType &gt;&nbsp;&nbsp; &nbsp;ReaderType;<br>
<br>
&nbsp;&nbsp; &nbsp;ReaderType::Pointer reader = ReaderType::New();<br>
<br>
&nbsp;&nbsp; &nbsp;reader-&gt;SetFileName( (LPCTSTR)csFileName);<br>
&nbsp;&nbsp; &nbsp;reader-&gt;SetImageIO( gdcmIO );<br>
<br>
&nbsp;&nbsp; &nbsp;// Return prematurely to invoke 'reader' destructor<br>
&nbsp;&nbsp; &nbsp;// when going out of scope.<br>
&nbsp;&nbsp; &nbsp;return FALSE;<br>
<br>
&nbsp;&nbsp; &nbsp;try {<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;reader-&gt;Update();<br>
&nbsp;&nbsp; &nbsp;} catch (std::exception &amp;err) {<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;string msg = err.what();<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;AfxMessageBox(msg.c_str());<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return FALSE;<br>
&nbsp;&nbsp; &nbsp;}<br>
<br>
...<br>
---------------------------------------------------------------------------<br>
<br>
Debugger stops at the destructor ~ImageSource() <br>
<br>
...<br>
&nbsp;&nbsp;&nbsp; * SmartPointer to a DataObject. If a subclass of ImageSource has<br>
&nbsp;&nbsp; * multiple outputs of different types, then that class must provide<br>
&nbsp;&nbsp; * an implementation of MakeOutput(). */<br>
&nbsp; virtual DataObjectPointer MakeOutput(unsigned int idx);<br>
&nbsp; <br>
protected:<br>
&nbsp; ImageSource();<br>
&nbsp; virtual ~ImageSource() {}&nbsp;&nbsp; &lt;- Debugger stops here<br>
&nbsp; <br>
&nbsp; /** A version of GenerateData() specific for image processing<br>
&nbsp;&nbsp; * filters.&nbsp; This implementation will split the processing across<br>
&nbsp;&nbsp; * multiple threads. The buffer is allocated by this method. Then<br>
&nbsp;
...<br>
</body>
</html>