[vtkusers] vtkImageIterator: subregionning

Mathieu Malaterre Mathieu.Malaterre at creatis.insa-lyon.fr
Mon Apr 28 12:51:50 EDT 2003

Hi all,

	I wanted to take advantage of the vtkImageIterator but I have had some 
problems. I hope somebody could help me figure out why these happens.
	Here is the C++ file I used to understand what I do wrong:

int main( int argc, char ** argv )
   int ext[6] = { 0, 100, 0, 100, 0, 100 };

   vtkImageData *imagedata = vtkImageData::New();
   imagedata->SetExtent( ext );
   imagedata->SetScalarTypeToUnsignedShort ();
   imagedata->Update(); //1

   vtkImageData *imagedata2 = vtkImageData::New();
   imagedata2->SetExtent( ext );
   imagedata2->SetScalarTypeToUnsignedShort ();
   imagedata2->Update(); //1

   int region[6];

   for(int i=0; i<10; i++)
   region[4] = region[2] = region[0] = 10*i;
   region[5] = region[3] = region[1] = 10*i + 9;

   imagedata->SetExtent( region ); //2
   imagedata2->SetExtent( region ); //2
   vtkImageIterator<unsigned short> inIt(imagedata, region);
   vtkImageIterator<unsigned short> outIt(imagedata2, region);

   while (!outIt.IsAtEnd())
     unsigned short* inSI = inIt.BeginSpan();
     unsigned short* outSI = outIt.BeginSpan();
     unsigned short* outSIEnd = outIt.EndSpan();

       while (outSI != outSIEnd)
         *outSI = 255;
         *inSI = 0;


   imagedata2->SetExtent( ext ); //3


   return 0;

	You'll see that there are some comments //1,2,3. This corresponds to:

1. If I don't do an Update here the iterator won't get the good extent.
(Is this normal to explicitely call Update in a VTK pipeline ?). BTW I 
thought SetWholeExtent would do the trick: seems to be worse.

2. I wanted to work on subregions. But vtkImageIterator only wants to
work on the whole extent. If I don't call SetExtent I obtained a
seg fault ! I don't understand why ?

3. Of course by rediffining each time a new SetExtent, the whole extent 
is lost at the end of the pipeline. So I need to redefine it.

I really would like someone to told me how to use vtkImageIterator or 
answer my questions. This is too bad a templated code is less handy than 
a good ol' fortran 'for loop'.


Mathieu Malaterre
28 Avenue du Doyen LEPINE
B.P. Lyon-Montchat
69394 Lyon Cedex 03

More information about the vtkusers mailing list