[Insight-users] Image reader problem
Bill Lorensen
bill.lorensen at gmail.com
Tue May 6 01:33:51 EDT 2008
Also, it is possible that your code has a problem elsewhere that has
only surfaced after switching to the new compiler. You could be
trashing memory somewhere.
Can you post a small test program that crashes? We could try to run it
through a memory checker like valgrind.
Bill
On Mon, May 5, 2008 at 6:13 PM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>
> Hi Charles,
>
> Most ITK IO classes rely on the functionalities of std::streams.
>
> If you can use
>
> * std::ifstream
> * std::ofstream
>
> for managing your filenames (in Unicode) then most ITK IO classes
> should work fine as well.
>
> There are however several ImageIO classes that rely on third party
> libraries, (PNG, JPEG...) and for those we may have to check type
> by type.
>
>
> Could you let us know if you can (independently of ITK) read
> and write files using std::ifstream and std::ofstream when
> the filenames contain characters requiring a unicode
> representation ?
>
>
> Please let us know what you find,
>
>
> Thanks
>
>
> Luis
>
>
> -----------------------
> Charles Knox wrote:
>>
>> Thanks Bill and Niels,
>>
>> I ran itkGDCMImageIOTest in debugging mode (after hard coding in some file
>> names) and it runs fine! I can step into ITK code and see the file names
>> being saved. Both ITK and my software are compiled using the _MBCS option
>> (multi-byte character strings), so I don't think it's a problem with
>> multi-byte characters, although am still looking at this.
>>
>> Does ITK support Unicode or MBCS? I don't know.
>>
>> So, as of now, I'm stumped.
>> Regards,
>> Charlie
>>
>> Bill Lorensen wrote:
>>
>>> Charles,
>>>
>>> Do the tests in Insight/Testing/Code/IO run OK?
>>>
>>> We don't have any VS 9.0 platforms in our testing suite unfortunately.
>>>
>>> Bill
>>>
>>> On Mon, May 5, 2008 at 12:37 PM, Charles Knox <knoxcharles at qwest.net>
>>> wrote:
>>>
>>>>
>>>> The function ReadDICOMImage() gets called to test for/read a DICOM image
>>>> file.
>>>> It has worked consistently for me through ITK versions 1.x through 3.4
>>>> when
>>>> compiled
>>>> with MS Visual C++ 6.0. But now, when compiling with MS Visual Studio
>>>> v9.0
>>>> for
>>>> x86 and under Windows Vista, the debugger traps an access violation from
>>>> the
>>>> destructor ~ImageSource() (located in file itkImageSource.h).
>>>>
>>>>
>>>> -----------------------------------------------------------------------------------
>>>>
>>>> BOOL CImageData::ReadDICOMImage( CString &csFileName, IMAGEPARAMS
>>>> &iParam )
>>>> {
>>>> // First check for a DICOM file.
>>>> itk::GDCMImageIO::Pointer gdcmIO = itk::GDCMImageIO::New();
>>>>
>>>> // This works but commented out to get to 'reader'
>>>> //if (!gdcmIO->CanReadFile((LPCTSTR)csFileName)
>>>> // return FALSE;
>>>>
>>>> typedef signed short PixelType;
>>>> // Set dimensions to 3 to have reader return z-value
>>>> const UINT Dimension = 3;
>>>> typedef itk::Image< PixelType, Dimension > ImageType;
>>>> typedef itk::ImageFileReader< ImageType > ReaderType;
>>>>
>>>> ReaderType::Pointer reader = ReaderType::New();
>>>>
>>>> reader->SetFileName( (LPCTSTR)csFileName);
>>>> reader->SetImageIO( gdcmIO );
>>>>
>>>> // Return prematurely to invoke 'reader' destructor
>>>> // when going out of scope.
>>>> return FALSE;
>>>>
>>>> try {
>>>> reader->Update();
>>>> } catch (std::exception &err) {
>>>> string msg = err.what();
>>>> AfxMessageBox(msg.c_str());
>>>> return FALSE;
>>>> }
>>>>
>>>> ...
>>>>
>>>> ---------------------------------------------------------------------------
>>>>
>>>> Debugger stops at the destructor ~ImageSource()
>>>>
>>>> ...
>>>> * SmartPointer to a DataObject. If a subclass of ImageSource has
>>>> * multiple outputs of different types, then that class must provide
>>>> * an implementation of MakeOutput(). */
>>>> virtual DataObjectPointer MakeOutput(unsigned int idx);
>>>>
>>>> protected:
>>>> ImageSource();
>>>> virtual ~ImageSource() {} <- Debugger stops here
>>>>
>>>> /** A version of GenerateData() specific for image processing
>>>> * filters. This implementation will split the processing across
>>>> * multiple threads. The buffer is allocated by this method. Then
>>>> ...
>>>>
>>>> _______________________________________________
>>>> Insight-users mailing list
>>>> Insight-users at itk.org
>>>> http://www.itk.org/mailman/listinfo/insight-users
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>
More information about the Insight-users
mailing list