[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