1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
/*=========================================================================
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;
}
|