<div>Hi Luis and Mathieu,</div>
<div>Sorry to trouble you, but I have been spending a whole month and trying to convert a Dicom RT file (unsign int pixel type) to mhd file with very little progress.<br>The Dicom file is a muti fram format with &quot;Grid Frame Offset Vector tag: (3004,000C)&quot;. I used gdcm (1.2) to read the size, spacing, and origin, and pixel data. Then convert the pixel format into MetaImage.<br>
The line of &quot;  unsigned int *imageData = fh-&gt;GetImageDataRaw(); &quot;  output the error message: &#39;initializing&#39; : cannot convert from &#39;uint8_t *&#39; to &#39;unsigned short *&#39;.<br>The line of &quot;  itk::ImageRegionIterator&lt; ImageType &gt; it(im,  im-&gt;GetLargestPossibleRegion()); &quot; returned : cannot convert from &#39;unsigned short *&#39; to &#39;const unsigned int .<br>
Please take a look at the code and give me an idea to work around it. I appreciate any of your input and your time.</div>
<div>Howard</div>
<div> </div>
<div>#include &quot;itkImageFileReader.h&quot;<br>#include &quot;itkImageFileWriter.h&quot;<br>#include &quot;gdcmFileHelper.h&quot;<br>#include &quot;gdcmFile.h&quot;<br>#include &lt;itkImage.h&gt;<br>#include &lt;itkMetaImageIO.h&gt;<br>
#include &lt;itkImageRegionIterator.h&gt;<br>#include &lt;stdio.h&gt;  //sscanf <br>int main( int argc, char* argv[] )<br>{<br>  if( argc &lt; 2 )<br>    {<br>    std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; std::endl;<br>
    std::cerr &lt;&lt; argv[0] &lt;&lt; &quot; DicomImage OutputDicomImage &quot;;<br>    //std::cerr &lt;&lt; &quot; OutputImage RescaleDicomImage\n&quot;;<br>    return EXIT_FAILURE;<br>    } <br>  typedef unsigned int InputPixelType;<br>
  const unsigned int   InputDimension = 3; <br>  typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<br>  typedef itk::ImageFileReader&lt; InputImageType &gt; ReaderType; <br>  gdcm::File *f1 = new gdcm::File();<br>
   f1-&gt;SetFileName( argv[1] );<br>   f1-&gt;Load();      <br>   int linesNumber   = f1-&gt;GetYSize();<br>   int rawsNumber    = f1-&gt;GetXSize();<br>   int framesNumber  = f1-&gt;GetZSize();// defaulted to 1 if not found                         <br>
            float xs = f1-&gt;GetXSpacing();<br>   float ys = f1-&gt;GetYSpacing();   <br>   float zs = f1-&gt;GetZSpacing();// defaulted to 1.0 if not found strSpacing (0x3004,0x000c) <br>            const std::string strSpacing = f1-&gt;GetEntryValue(0x3004,0x000c); <br>
            const int MaxZ = 256;<br>     float sp[MaxZ] ;<br>               if ( strSpacing != gdcm::GDCM_UNFOUND )<br>                        {<br>                                    if ( sscanf( strSpacing.c_str(), &quot;%f \\ %f &quot;, &amp;sp[0], &amp;sp[1]) &gt; 0 )<br>
                                    zs = sp[1]-sp[0];<br>                        } <br>   float xo = f1-&gt;GetXOrigin();<br>   float yo = f1-&gt;GetYOrigin();<br>   float zo = f1-&gt;GetZOrigin();             <br>            gdcm::FileHelper *fh = new gdcm::FileHelper();<br>
            unsigned int *imageData = fh-&gt;GetImageDataRaw();            <br>            typedef itk::Image&lt;unsigned int, 3&gt; ImageType; <br>  ImageType::SizeType imSize = {{linesNumber, rawsNumber, framesNumber}};<br>
  ImageType::Pointer im = ImageType::New();<br>  im-&gt;SetRegions(imSize);<br>  im-&gt;Allocate(); <br>  // Set some values in the image<br>  itk::ImageRegionIterator&lt; ImageType &gt; it(im, <br>        im-&gt;GetLargestPossibleRegion()); <br>
  it.GoToBegin();<br>  while(imageData)<br>    {<br>    it.Set(imageData );<br>    ++it;<br>    } <br>  typedef itk::ImageFileWriter&lt; ImageType &gt; VolumeWriterType;<br>  VolumeWriterType::Pointer writer = VolumeWriterType::New();  <br>
  itk::MetaImageIO::Pointer metaWriter = itk::MetaImageIO::New();<br>  writer-&gt;SetImageIO( metaWriter ); <br>  writer-&gt;SetFileName( &quot;test.mhd&quot; ); <br>  writer-&gt;SetInput( im );<br>  writer-&gt;Update();  <br>
  delete f1; <br>  delete fh;             <br>  return EXIT_SUCCESS;<br>}</div>