Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.8 KiB

2 years ago
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: ImportExport.cxx,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkImageViewer.h"
#include "vtkImageReader.h"
#include "vtkImageImport.h"
#include "vtkImageExport.h"
#include "vtkWindowToImageFilter.h"
#include "vtkPNMWriter.h"
#include "vtkTestUtilities.h"
#include "vtkRegressionTestImage.h"
int ImportExport( int argc, char *argv[] )
{
int i,j,k;
char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/headsq/quarter");
vtkImageReader *reader = vtkImageReader::New();
reader->SetDataByteOrderToLittleEndian();
reader->SetDataExtent(0,63,0,63,1,93);
reader->SetFilePrefix(fname);
reader->SetDataMask(0x7fff);
delete [] fname;
// create exporter
vtkImageExport *exporter = vtkImageExport::New();
exporter->SetInputConnection(reader->GetOutputPort());
exporter->ImageLowerLeftOn();
// get info from exporter and create array to hold data
int memsize = exporter->GetDataMemorySize();
int *dimensions = exporter->GetDataDimensions();
// export the data into the array
short *data = new short[memsize/sizeof(short)];
exporter->Export(data);
// alternative method for getting data
// short *data = exporter->GetPointerToData();
// do a little something to the data
for (i = 0; i < dimensions[2]; i++)
{
for (j = 0; j < dimensions[1]; j++)
{
for (k = 0; k < dimensions[0]; k++)
{
if (k % 10 == 0)
{
data[k + dimensions[0]*(j + dimensions[1]*i)] = 0;
}
if (j % 10 == 0)
{
data[k + dimensions[0]*(j + dimensions[1]*i)] = 1000;
}
}
}
}
// create an importer to read the data back in
vtkImageImport *importer = vtkImageImport::New();
importer->SetWholeExtent(1,dimensions[0],1,dimensions[1],1,dimensions[2]);
importer->SetDataExtentToWholeExtent();
importer->SetDataScalarTypeToShort();
importer->SetImportVoidPointer(data);
vtkImageViewer *viewer = vtkImageViewer::New();
viewer->SetInputConnection(importer->GetOutputPort());
viewer->SetZSlice(45);
viewer->SetColorWindow(2000);
viewer->SetColorLevel(1000);
viewer->Render();
int retVal = vtkRegressionTestImage( viewer->GetRenderWindow() );
viewer->Delete();
importer->Delete();
exporter->Delete();
reader->Delete();
delete [] data;
return !retVal;
}