[vtkusers] vtkImageImport Segfault

Amy Squillacote amy.squillacote at kitware.com
Tue May 31 11:50:43 EDT 2005


I doubt that this will fix the seg fault, but shouldn't your DataExtent be 
set to 0, xdim-1, 0, ydim-1, 0, zdim-1?
- Amy

At 11:41 AM 5/31/2005, Randall Hand wrote:
>Well, I modified my code to do the following:
>
>     xdim = 2191;
>     ydim = 2191;
>     zdim = 800;
>     vtkImageReader *file = vtkImageReader::New();
>     file->SetFileName(argv[1]);
>     file->SetDataExtent(1, xdim-1,
>                         1, ydim-1,
>                         1, zdim-1);
>     file->SetHeaderSize(4);
>     file->SetDataScalarTypeToUnsignedChar();
>     file->SetScalarArrayName("data");
>     file->Update();
>     PrintStatistics(file->GetOutput());
>
>and, sadly, it still segfaults:
>[10:39:48am]% dbx imageimport
>dbx version 7.3.4 (86441_Nov11 MR) Nov 11 2002 11:31:55
>Core from signal SIGSEGV: Segmentation violation
>(dbx) where
>Thread 0x10000
> >  0 ::vtkImageReaderUpdate2(vtkImageReader*,vtkImageData*,unsigned 
> char*,unsigned char*)(self = 0x100375a0, data = 0x100380d0, inPtr = 
> 0x1003adce = "", outPtr = (nil)) 
> ["/viz/home/rhand/src/ezViz/Utilities/VTK/IO/vtkImageReader.cxx":333, 
> 0x7b58fb4]
>(dbx) quit
>
>The data file:
>[10:39:58am]% ls -la bytes.CY00000
>-rwxr-----    1 rhand    erdcvsta 3840384808 May 27 09:01 bytes.CY00000
>
>3,840,384,808 bytes.  2191 * 2191 * 800 = 3,840,384,800 .. 4 bytes header 
>at both the beginning and the end.
>
>
>On 5/31/05, Amy Squillacote 
><<mailto:amy.squillacote at kitware.com>amy.squillacote at kitware.com> wrote:
>Did you try using the SetHeaderSize method in vtkImageReader2 (the 
>superclass of vtkImageReader)?  I know it isn't just specifying a number 
>of bytes to read, but using that and the SetDataExtent method (also in 
>vtkImageReader) should do the right thing.
>
>- Amy
>
>
>At 10:15 AM 5/31/2005, Randall Hand wrote:
>>Ok, I'm looking at this now (computers are finally back online :) ), and 
>>I can't figure out how to set the raw number of bytes to read.  I see 
>>SetDataVOI, but nothing to "bypass" that and specify a number of bytes.
>>
>>On 5/27/05, Mathieu Malaterre <<mailto:mathieu.malaterre at kitware.com> 
>>mathieu.malaterre at kitware.com> wrote:
>>Randall,
>>         Hum I believe you can read those bytes but never use it... Could 
>> you
>>try to read 3,840,384,800 bytes + 4 but set properly the dimension. If
>>you are lucky enough no test is done to check consistency of datasize
>>and dimension of data.
>>My 2 cents,
>>Mathieu
>>Randall Hand wrote:
>> > Well, I have an addition 4 bytes at the end of the file to skip as
>> > well.. I suppose I could postprocess & write a new file without these
>> > final 4 bytes, but that's gonna be pretty wasteful of disk space.  Is
>> > there a way to skip them?
>> >
>> >
>> >
>> > On 5/27/05, *Mathieu Malaterre* 
>> <<mailto:mathieu.malaterre at kitware.com> mathieu.malaterre at kitware.com
>> > <<mailto:%20mathieu.malaterre at kitware.com> mailto: 
>> mathieu.malaterre at kitware.com>> wrote:
>> >
>> >     Randall,
>> >
>> >             Could you instead give vtkImageReader a try. Just specify
>> >     the lenght of
>> >     data you want to read: 3,840,384,800 bytes. By default vtkImageReader
>> >     start reading from the end. Thefore you are garantee to skip a
>> >     header if
>> >     any (4 bytes in your case apparently).
>> >
>> >     HTH
>> >     Mathieu
>> >
>> >     Randall Hand wrote:
>> >      > I'm attempting to load a simple "Brick of Bytes (BoB)" format
>> >     file into
>> >      > VTK.  It is 2191x2191x800 unsigned chars (3,840,384,800 bytes).
>> >     With 4
>> >      > bytes at the beginning that I have to skip (Gotta love 
>> fortran).  My
>> >      > code is like the following:
>> >      >
>> >      >     if (stat(argv[1], &file_info) == -1) {
>> >      >         perror("Unable to stat file!\n\t");
>> >      >         return -1;
>> >      >     }
>> >      >     fptr = fopen(argv[1], "r");
>> >      >     if ((data = (char*)malloc(file_info.st_size)) == NULL) {
>> >      >         perror("Unable to allocate memory!\n\t");
>> >      >         return -1;
>> >      >     }
>> >      >     dataptr = data;
>> >      >     fread(dataptr, 1, 4, fptr);
>> >      >     dataptr += 4;
>> >      >     printf("\n\n");
>> >      >     for(int i=0; i<xdim; i++) {
>> >      >         fread(dataptr, ydim,zdim,  fptr);
>> >      >         dataptr += (ydim * zdim);
>> >      >     }
>> >      >
>> >      >     vtkImageImport *import = vtkImageImport::New();
>> >      >     import->AddObserver(vtkCommand::ProgressEvent, progress);
>> >      >     import->SetDataScalarTypeToUnsignedChar();
>> >      >     import->SetNumberOfScalarComponents(1);
>> >      >     import->SetWholeExtent(1, xdim-1,
>> >      >                            1, ydim-1,
>> >      >                            1, zdim-1);
>> >      >     import->SetDataExtentToWholeExtent();
>> >      >     import->SetImportVoidPointer(data + skip);
>> >      >
>> >      >     vtkDataSetWriter *writer = vtkDataSetWriter::New();
>> >      >     writer->SetInput(import->GetOutput());
>> >      >     writer->SetFileName("resulting.vtk");
>> >      >     writer->Write();
>> >      >
>> >      >
>> >      > When I run this, however, the output VTK file only contains the
>> >     following:
>> >      > # vtk DataFile Version 3.0
>> >      > vtk output
>> >      > ASCII
>> >      > DATASET STRUCTURED_POINTS
>> >      > DIMENSIONS 2191 2191 800
>> >      > SPACING 1 1 1
>> >      > ORIGIN 1 1 1
>> >      >
>> >      > No data is actually written to the file.  When I try to connect
>> >     this to
>> >      > a rendering pipeline or start querying the resulting vtkDataSet 
>> for
>> >      > properties (Scalar ranges, number of points, etc) I get strange
>> >     results
>> >      > and eventually I get Segfault/Core dumps.  Often times the 
>> number of
>> >      > points listed comes out as a large negative number, instead of the
>> >      > 3.8bil that it should be.
>> >      >
>> >      > A stack trace of the core dumps only reveals this:
>> >      >
>> >      > [8:50:48am]% dbx imageimport
>> >      > dbx version 7.3.4 (86441_Nov11 MR) Nov 11 2002 11:31:55
>> >      > Core from signal SIGSEGV: Segmentation violation
>> >      > (dbx) where
>> >      >
>> >      > Thread 0x10000
>> >      >  >  0 vtkDataArrayTemplate<unsigned
>> >     char>::ComputeScalarRange(int)(this
>> >      > = 0xf4eb83c0, comp = 0)
>> >      >
>> > 
>> ["/viz/home/rhand/src/ezViz/Utilities/VTK/Common/vtkDataArrayTemplate.txx":644, 
>>
>> >      > 0x85f2758]
>> >      > (dbx)
>> >      > (dbx) quit
>> >      >
>> >      >
>> >      >
>> >      > --
>> >      > Randall Hand
>> >      > <http://www.yeraze.com>http://www.yeraze.com
>> >      >
>> >      >
>> >      >
>> > 
>> ------------------------------------------------------------------------
>> >      >
>> >      > _______________________________________________
>> >      > This is the private VTK discussion list.
>> >      > Please keep messages on-topic. Check the FAQ at:
>> >     <http://www.vtk.org/Wiki/VTK_FAQ>http://www.vtk.org/Wiki/VTK_FAQ
>> >      > Follow this link to subscribe/unsubscribe:
>> >      > 
>> <http://www.vtk.org/mailman/listinfo/vtkusers>http://www.vtk.org/mailman/listinfo/vtkusers 
>>
>> >
>> >
>> >
>> >
>> > --
>> > Randall Hand
>> > <http://www.yeraze.com>http://www.yeraze.com < http://www.yeraze.com>
>>
>>
>>
>>
>>--
>>Randall Hand
>><http://www.yeraze.com>http://www.yeraze.com
>>_______________________________________________
>>This is the private VTK discussion list.
>>Please keep messages on-topic. Check the FAQ at: 
>><http://www.vtk.org/Wiki/VTK_FAQ>http://www.vtk.org/Wiki/VTK_FAQ
>>Follow this link to subscribe/unsubscribe:
>><http://www.vtk.org/mailman/listinfo/vtkusers>http://www.vtk.org/mailman/listinfo/vtkusers
>
>
>
>
>--
>Randall Hand
><http://www.yeraze.com>http://www.yeraze.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20050531/08c5c150/attachment.htm>


More information about the vtkusers mailing list