[vtkusers] vtkImageImport Segfault

Randall Hand randall.hand at gmail.com
Tue May 31 11:41:28 EDT 2005


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 <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* < 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* < mathieu.malaterre at kitware.com
> > < mailto: mathieu.malaterre at kitware.com<%20mathieu.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
> > >
> > >
> > >
> > ------------------------------------------------------------------------ 
> 
> > >
> > > _______________________________________________
> > > 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 
> >
> >
> >
> >
> > --
> > Randall Hand
> > http://www.yeraze.com < http://www.yeraze.com>
> 
> 
> 
> 
> -- 
> Randall Hand
> 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
> Follow this link to subscribe/unsubscribe:
>  http://www.vtk.org/mailman/listinfo/vtkusers
> 
> 


-- 
Randall Hand
http://www.yeraze.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20050531/e38dd4d1/attachment.htm>


More information about the vtkusers mailing list