#include "vtkImageData.h"
#include "vtkImageCast.h"
#include "vtkPointData.h"
#include "vtkBitArray.h"
#include "vtkUnsignedCharArray.h"
int main(int argc, char *argv[])
{
if( argc < 3 )
{
return 1;
}
const char *filename = argv[1];
const char *outfilename = argv[2];
reader->SetFileName( filename );
reader->Update();
vtkDataArray* array = reader->GetOutput()->GetPointData()->GetScalars();
vtkBitArray *barray = vtkBitArray::SafeDownCast( array );
if( !barray ) return false;
vtkIdType nvalues = array->GetNumberOfTuples();
vtkUnsignedCharArray *uarray = vtkUnsignedCharArray::New();
uarray->SetNumberOfTuples( nvalues );
for(vtkIdType i = 0; i < nvalues; ++i)
{
uarray->SetValue( i, (unsigned char)barray->GetValue(i) );
}
vtkImageData *copy = vtkImageData::New();
copy->SetScalarType( VTK_UNSIGNED_CHAR );
copy->SetExtent( reader->GetOutput()->GetExtent() );
copy->AllocateScalars();
copy->GetPointData()->SetScalars( uarray );
uarray->Delete();
writer->SetFileName( outfilename );
writer->SetInput( copy );
writer->SetImageFormat( reader->GetImageFormat() );
writer->SetShift( reader->GetShift() );
writer->SetScale( reader->GetScale() );
writer->SetFileDimensionality( reader->GetFileDimensionality( ) );
reader->Delete();
copy->Delete();
writer->Delete();
return 0;
}