[Insight-developers] backward compatibility issue with new streaming support
Bradley Lowekamp
blowekamp at mail.nih.gov
Fri Dec 11 10:25:24 EST 2009
Also how does it not work now? Error message? invalid data? etc?
I found this innocent change could cause erroneous output under these conditions. The output would not be in the correct byte orders. Is that the problem you are experiencing?
http://public.kitware.com/cgi-bin/viewcvs.cgi/Code/IO/itkMetaImageIO.cxx?root=Insight&r1=1.101&r2=1.102
Brad
On Dec 11, 2009, at 10:19 AM, Lowekamp, Bradley (NIH/NLM/LHC) [C] wrote:
> What version were you upgrading from and to?
>
> Is it all readers that broke for you or just MetaImageIO?
>
> I am sorry that these changes broke your code, I tried very hard to ensure that the interface was backwards compatible.
>
> Brad
>
> On Dec 11, 2009, at 10:00 AM, M.Staring at lumc.nl wrote:
>
>> Dear developers,
>>
>> In our institute (LKEB) we sometimes use the ITK image IO classes
>> without using the itk::ImageFileReader. (This way we can e.g. directly
>> read in the data buffer into our own image type: lkebImage.)
>>
>> We recently updated the underlying ITK to a more recent version, and
>> found out that it did not work anymore. The reason it does not work are
>> the changes that were made to support streaming. A new member m_IORegion
>> was added to the class ImageIOBase; it's constructor initializes that
>> member to a 2D region of size [0 0]. The framework now expects that this
>> m_IORegion is set externally, which in the ITK is done in the
>> ImageFileReader (line 389 of the txx). However, we do not use the
>> ImageFileReader and therefore our code breaks.
>>
>> To fix this issue I would expect that the m_IORegion is by default set
>> to the largest possible region (or the requested region) and not to size
>> 0. I'm not sure if it is the best place to fix this, but this could be
>> fixed by adapting the Read() or ReadImageInformation()-functions of all
>> ImageIO's that support streaming. For example MetaImageIO::Read() could
>> check if m_IORegion was manually set, and if not set it to the requested
>> region. Something like:
>>
>> if ( !m_IORegionManuallySet ) // or: if ( m_IORegion.GetSize() == 0 )
>> {
>> m_IORegion = m_RequestedRegion; // or: m_IORegion =
>> m_LargestPossibleRegion;
>> }
>>
>> and then proceed ...
>>
>> What do you think ?
>>
>> Regards,
>>
>> Marius
>>
>>
>> Marius Staring, PhD
>> Division of Image Processing (LKEB)
>> Department of Radiology
>> Leiden University Medical Center
>> PO Box 9600, 2300 RC Leiden, The Netherlands
>> phone: +31 (0)71 526 1106, fax: +31 (0)71 526 6801
>> m.staring at lumc.nl
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-developers
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
More information about the Insight-developers
mailing list