Hi<div><br></div><div>I'm having a strange problem when using vtkImageData to deal with cropping bitmaps. I have bitmaps of size 1008 pixels (in width, height irrelevant) where the first 504 pixels are considered 'left' and the second 504 pixels 'right'. The idea is to basically swap left and right, i.e. split the image at the 504 pixel mark and then swap the two sides (note this isn't the same as a mirror).</div>
<div><br></div><div>I've been trying this in a number of ways, using vtkImageCanvasSource2D and vtkImageClip, whereby i just draw the first 504 pixels into the second region and vice versa. However, no matter how i do this, the resultant image *always* has a 20-30 pixel offset that just shouldn't exist. I'm getting the whole extent of the original image and using 0.5 of the width to decide where to start drawing the first 504 pixels (i.e. at the 504 mark) yet no matter what, it doesn't draw in the right place.</div>
<div><br></div><div>I've provided some sample code using vtkImageCanvasSource2D to illustrate the general idea (which doesn't work). </div><div><br></div><div>Any help would be greatly appreciated</div><div><br></div>
<div>Thanks</div><div><br></div><div><br></div><div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>vtkImageCanvasSource2D *swapSides = vtkImageCanvasSource2D::New();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>swapSides->SetNumberOfScalarComponents(3);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>swapSides->SetScalarTypeToUnsignedChar();</div></div><div><br></div><div><div>int *extent = image->GetWholeExtent();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int width = extent [0];</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>int height = extent [1];</div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>swapSides->SetExtent(0, (extent[0]-1), 0, (extent[1]-1), 0, 0);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>swapSides->SetDrawColor(0, 0, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>swapSides->FillBox(0, extent[0], 0, extent[1]);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>double *pixel = new double[3];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">/</span>/draw the second half in the first half</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>int newX = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>for(int x = (width / 2); x < width; x++)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>for(int y = 0; y < height; y++)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>pixel[0] = image->GetScalarComponentAsFloat(x, y, 0, 0);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>pixel[1] = image->GetScalarComponentAsFloat(x, y, 0, 1);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>pixel[2] = image->GetScalarComponentAsFloat(x, y, 0, 2);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>swapSides->SetDrawColor(pixel);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>swapSides->DrawPoint(newX, y);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>newX++;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div>//draw the first half in the second half</div><div>
<span class="Apple-tab-span" style="white-space:pre">        </span>newX = (width / 2);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>for(int x = 0; x < (width / 2); x++)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>for(int y = 0; y < height; y++)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>pixel[0] = image->GetScalarComponentAsFloat(x, y, 0, 0);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>pixel[1] = image->GetScalarComponentAsFloat(x, y, 0, 1);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>pixel[2] = image->GetScalarComponentAsFloat(x, y, 0, 2);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>swapSides->SetDrawColor(pixel);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>swapSides->DrawPoint(newX, y);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>newX++;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div></div>