[vtkusers] How does one enforce recognition of little endian data in VTK?

Sanatan Sahgal sanatan_sahgal at hotmail.com
Mon May 2 12:23:55 EDT 2005


Because it is an extra overhead especially for large datasets and the app 
will take a performance hit everytime I swap bytes for each dataset. As 
stated in my first e-mail, I already know the problem can be solved by doing 
byte swapping before feeding the data to VTK. I am looking for a cleaner 
solution where the extra overhead of byte swapping can be avoided.

I think the root cause of the problem is that VTK expects Big Endian data on 
Little Endian machines. If VTK binaries run on computers with little endian 
architecture then it is only natural to expect that the byte ordering of the 
data will also be little endian. Why does the data have to be in big endian 
format?

Anyway, doesn't VTK eventually have to swap the data back to little endian 
format for the Intel architecture? It just seems that on computers bound to 
little endian architecture there is a lot of swapping necessary for no 
reason at all. Perhaps I am missing something. I think the inconsistent 
endianness is a major source of confusion especially for someone who has no 
need of using the VTK reader classes.

-Sanatan

>
>Interesting, so why don't you change the type from big endian to little 
>endian when you are reading the file during your 'pre-processing' steps.
>
>Anyway the whole byte swapping code is in vtkByteSwap
>
>http://www.vtk.org/doc/nightly/html/classvtkByteSwap.html
>
>HTH
>Mathieu
>
>Sanatan Sahgal wrote:
>>Mathieu,
>>
>>Thanks for the prompt response.
>>
>>The data is not coming from a file. Prior to the data hitting any of the 
>>VTK classes it undergoes some pre-processing steps that I need to do. The 
>>bottom line is that the data feed to VTK is not from a file. So, using 
>>vtkImageReader class will not work. Is there any other way?
>>
>>thanks,
>>Sanatan
>>
>>>
>>>Sanatan,
>>>
>>>     Since you are reading from a file you should rather have a look at 
>>>the vtkImageReader class:
>>>
>>>http://www.vtk.org/doc/nightly/html/classvtkImageReader.html
>>>
>>>Since there is a member function that you need:
>>>
>>>vtkImageReader2::SetDataByteOrderToBigEndian()
>>>
>>>HTH
>>>Mathieu
>>>
>>>Sanatan Sahgal wrote:
>>>
>>>>Hello,
>>>>
>>>>I am using VTK on an Intel platform running Windows XP professional. I 
>>>>have a 2 bytes per pixel grayscale image which I wish to display on the 
>>>>screen using VTK.
>>>>
>>>>My image raw data is in little endian format and when I feed it to VTK I 
>>>>see garbage on the screen because VTK seems to expect it in big endian 
>>>>format. If I swap the bytes and then feed it to VTK the image shows up 
>>>>correctly on my screen.
>>>>
>>>>I don't want this extra overhead of swapping the bytes. I want VTK to 
>>>>recognize the raw little endian data just as it is. Is there any way to 
>>>>tell VTK that my data is in little endian format and it should read it 
>>>>as such?
>>>>
>>>>I am using the vtkImageData class. I feed data to the imageData instance 
>>>>as follows:
>>>>imageData->GetPointData()->SetScalars(pixelArrayVtk);
>>>>
>>>>The pixelArrayVtk instance is of type vtkDataArray and it is setup as 
>>>>follows:
>>>>pixelArrayVtk = CreateVtkDataArray(); //Creates instance of specific 
>>>>VtkDataArray type. Example: vtkShortArray::New()
>>>>pixelArrayVtk->SetVoidArray(imageRawData, totalSamples, 1);
>>>>
>>>>The imageRawData parameter is a pointer to the memory location which 
>>>>contains the raw image data in little endian format.
>>>>
>>>>Any help with this issue is appreciated.
>>>>
>>>>thanks,
>>>>Sanatan
>>>>
>>>>
>>>>_______________________________________________
>>>>This is the private VTK discussion list. Please keep messages on-topic. 
>>>>Check the FAQ at: 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