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

Jeff Lee jeff at cdnorthamerica.com
Mon May 2 13:21:51 EDT 2005


If you compile vtk on a little-endian machine, then byteswapping will 
only occur when reading big-endian.  vtk always swaps to native byte 
ordering.  So your problem probably lies in  the importer/reader not 
setting the DataByteOrder properly.  something like 
reader->SetDataByteOrderToLittleEndian() should do it.
-Jeff

Sanatan Sahgal wrote:

>
> 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
>>>>>
>>>>
>>>
>>>
>>>
>>
>
>
> _______________________________________________
> 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