[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