[vtkusers] How to cast vtkImageData from signed to unsigned?
Amy Squillacote
amy.squillacote at kitware.com
Fri Apr 20 08:16:01 EDT 2007
list at kobenetz.de wrote:
> Hi, I'm trying to volume render a set of DICOM files.
>
> I was able to open a single file with vtkDICOMImageReader
> (Using SetFileName) and display the content without Problems.
>
>
> Then I wanted to display the whole volume using
> vtkDICOMImageReader::SetDirectoryName, but I got the following runtime error:
>
> ----
> ERROR: In ..\..\SRC\VolumeRendering\vtkVolumeRayCastMapper.cxx, line 326
> vtkVolumeRayCastMapper (035BBD08): Cannot volume render data of type
> short, only unsigned char or unsigned short.
> ----
>
>
> I tried to convert the signed data to unsigned using vtkImageCast:
>
>
> ----
> vtkDICOMImageReader *dicomReader = vtkDICOMImageReader::New();
> dicomReader->SetDirectoryName( HOLZKLOTZ_VERZEICHNIS );
>
> vtkImageCast *imageCast = vtkImageCast::New();
> imageCast->SetInput( dicomReader->GetOutput() ); // ERROR HERE
> imageCast->SetOutputScalarTypeToUnsignedShort();
>
> vtkVolumeRayCastMapper *mapper = vtkVolumeRayCastMapper::New();
> mapper->SetInput( imageCast->GetOutput() );
> ----
>
> The code doesn't compile, because vtkImageCast::SetInput only
> accepts a vtkDataObject and the vtkDICOMImageReader only gives
> me a vtkImageData object.
>
> How can I 'convert' the signed ImageData to unsigned ImageData?
>
>
vtkImageData is a subclass of vtkDataObject; your code is probably not
compiling because you haven't included vtkImageData.h.
You may also want to look at the class vtkImageShiftScale. vtkImageCast
will use a cast operation to convert from one scalar type to another, so
there are no guarantees that your data will fit in the range provided by
the new scalar type. If you instead use vtkImageShiftScale, you can
convert your data to unsigned short as well as rescale your data so that
they fit in the range of unsigned short.
- Amy
--
Amy Squillacote
Kitware, Inc.
28 Corporate Drive
Clifton Park, NY 12065
Phone: (518) 371-3971 x106
More information about the vtkusers
mailing list