[vtkusers] vtkImageImport Segfault

Randall Hand randall.hand at gmail.com
Tue May 31 12:03:33 EDT 2005


You're right.. i've been messing with those numbers thinking I was violating 
my extents or an array boundary.. it hasn't helped tho.

On 5/31/05, Amy Squillacote <amy.squillacote at kitware.com> wrote:
> 
> 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* < 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/>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 
> 
> 


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


More information about the vtkusers mailing list