[vtkusers] How to retrun a vtkImageData object pointer from function call
Michael Schildt
michael.schildt at ifn-magdeburg.de
Fri Aug 24 02:43:55 EDT 2007
Thanks for the fast and usefull answer. The suggestion works as expected. :)
I just modified it to return the pointer too:
vtkImageData * itk2vtk(ReaderType3D::OutputImageType::Pointer image,
vtkImageData *output)
{
// --- Same stuff as you have below until converter->Update() ----
.....
output->ShallowCopy(converter->GetOutput());
return output;
}
So, I can used it in the same ways as before only need to instanciate
the output in the outer scope before calling the function.
Best reguards,
Michael Schildt
Karthik Krishnan schrieb:
> Michael :
>
> Upon return from your functiion, the smart pointer goes out of scope
> and will cleanup its resources, which includes the generated output,
> since noone is holding a reference to it. You could rephrase that
> method as below, with a shallow copy. The shallow copy will cause the
> "output" to hold a reference to the output of the converter and
> prevent it from vanishing upon return.
>
> void itk2vtk(ReaderType3D::OutputImageType::Pointer image,
> vtkImageData *output)
> {
> // --- Same stuff as you have below until converter->Update() ----
> ....
> converter->Update();
> output->ShallowCopy(converter->GetOutput());
> }
>
>
> --
> Karthik Krishnan
> R&D Engineer,
> Kitware Inc.
> On 8/22/07, *Michael Schildt* < michael.schildt at ifn-magdeburg.de
> <mailto:michael.schildt at ifn-magdeburg.de>> wrote:
>
> Hello!
>
> I Want to display data from ITK in VTK but I have trouble to return a
> VTK object from a function to the main function. I call the function
> with a valid 3d ITK image. The y-axis is flipped to account for the
> different coordinate systems of ITK and VTK. Then converted via
> ImageToVTKImageFilter. It works fine. I want to return the
> generated VTK
> image. It is valid up to the return statement. After that it seems
> to be
> deleted. How can I tell the program not to delete this object? Do
> i have
> to return the object instead of its pointer?
>
> Function in question is (vtkImage is valid until return, in main the
> return value is invalid):
>
> vtkImageData* itk2vtk(ReaderType3D::OutputImageType::Pointer
> image) {
>
> itk::FlipImageFilter<ReaderType3D::OutputImageType>::FlipAxesArrayType
> SourceAxes;
> SourceAxes[0] = false;
> SourceAxes[1] = true;
> SourceAxes[2] = false;
>
> itk::FlipImageFilter<ReaderType3D::OutputImageType>::Pointer flip
> = itk::FlipImageFilter<ReaderType3D::OutputImageType>::New();
> flip->SetFlipAxes(SourceAxes);
> flip->SetInput(image);
> flip->Update();
>
> itk::ImageToVTKImageFilter<ReaderType3D::OutputImageType>::Pointer
> converter
> =
> itk::ImageToVTKImageFilter<ReaderType3D::OutputImageType>::New();
> converter->SetInput(flip->GetOutput());
> converter->Update();
> vtkImageData *vtkImage = converter->GetOutput();
> return vtkImage;
> }
>
> Greetings,
> Michael Schildt
>
>
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ <http://www.vtk.org/Wiki/VTK_FAQ>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
More information about the vtkusers
mailing list