<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Hi
<p>I&nbsp;would like to know if it is an error or no in method CopyAndCastFrom
of vtkImageData class
<br>Here is the code of the sub-routine vtkImageDataCastExecute called
by CopyAndCastFrom
<p>&nbsp;1619 void vtkImageDataCastExecute(vtkImageData *inData, IT *inPtr,
<br>&nbsp;1620&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
vtkImageData *outData, OT *outPtr,
<br>&nbsp;1621&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int outExt[6])
<br>&nbsp;1622 {
<br>&nbsp;1623&nbsp;&nbsp; int idxR, idxY, idxZ;
<br>&nbsp;1624&nbsp;&nbsp; int maxY, maxZ;
<br>&nbsp;1625&nbsp;&nbsp; int inIncX, inIncY, inIncZ;
<br>&nbsp;1626&nbsp;&nbsp; int outIncX, outIncY, outIncZ;
<br>&nbsp;1627&nbsp;&nbsp; int rowLength;
<br>&nbsp;1628
<br>&nbsp;1629&nbsp;&nbsp; // find the region to loop over
<br>&nbsp;1630&nbsp;&nbsp; rowLength = (outExt[1] - outExt[0]+1)*inData->GetNumberOfScalarComponents();
<br>&nbsp;1631&nbsp;&nbsp; maxY = outExt[3] - outExt[2];
<br>&nbsp;1632&nbsp;&nbsp; maxZ = outExt[5] - outExt[4];
<br>&nbsp;1633
<br>&nbsp;1634&nbsp;&nbsp; // Get increments to march through data
<br>&nbsp;1635&nbsp;&nbsp; inData->GetContinuousIncrements(outExt, inIncX,
inIncY, inIncZ);
<br>&nbsp;1636&nbsp;&nbsp; outData->GetContinuousIncrements(outExt, outIncX,
outIncY, outIncZ);
<br>&nbsp;1637
<br>&nbsp;1638&nbsp;&nbsp; // Loop through ouput pixels
<br>&nbsp;1639&nbsp;&nbsp; for (idxZ = 0; idxZ &lt;= maxZ; idxZ++)
<br>&nbsp;1640&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;1641&nbsp;&nbsp;&nbsp;&nbsp; for (idxY = 0; idxY &lt;= maxY;
idxY++)
<br>&nbsp;1642&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;1643&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (idxR = 0; idxR
&lt; rowLength; idxR++) <b><i>&lt;---------------------- possible error</i></b>
<br>&nbsp;1644&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;1645&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Pixel
operation
<br>&nbsp;1646&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *outPtr
= (OT)(*inPtr);
<br>&nbsp;1647&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outPtr++;
<br>&nbsp;1648&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inPtr++;
<br>&nbsp;1649&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }...
<p>Ok, why does it iterate on rowlength and not just on maxR = (outExt[1]
- outExt[0])?
<br>rowLength is two big and it will make a pointer overflow ... I&nbsp;think.
Because it will iterate for (maxZ *&nbsp;maxY&nbsp;*&nbsp;rowLength) while
the vector size is (maxZ *&nbsp;maxY * maxR).
<br>For me it does not work with two images with the same dimensions but
with different scalar types.
<p>Thomas</html>