<div dir="ltr">Hello all,<br><br>I'm busy doing a fourth year project that requires the use of VTK. While i am new to this package, I have read both the Kitware books (that i own.<br>I have done my best in terms of searching the web, the vtkusers mailing list and read the two books. I have spent two weeks on this issue.<br>
<br>Configuration Details:<br>Operating System: Windows XP SP3 and Ubuntu 8.04<br>VTK Version: 5.0.4<br>Compiler: Using pure C++ with gcc.<br><br>The problem i am having is related to my lack of understanding of the requirements for the vtkImageExport class. I have the need to load images in<br>
general Imaging formats: .jpg, .bmp, .tif, and .png. In order to load these images I make use of the related images (vtkJPEGReader etc).<br><br>I found a great example in the release folder: VTK_5.0.4/VTK/Imaging/Testing/Cxx/ImportExport.cxx that makes use of the vtkImageReader. This example works 100% without any problems:<br>
<br>int ImportExport( int argc, char *argv[] )<br>{<br> int i,j,k;<br> <br> char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/headsq/quarter");<br> <br> vtkImageReader *reader = vtkImageReader::New();<br>
reader->SetDataByteOrderToLittleEndian();<br> reader->SetDataExtent(0,63,0,63,1,93);<br> reader->SetFilePrefix(fname);<br> reader->SetDataMask(0x7fff);<br> delete [] fname;<br> <br> // create exporter<br> vtkImageExport *exporter = vtkImageExport::New();<br>
exporter->SetInputConnection(reader->GetOutputPort());<br> exporter->ImageLowerLeftOn();<br><br> // get info from exporter and create array to hold data<br> int memsize = exporter->GetDataMemorySize();<br> int *dimensions = exporter->GetDataDimensions();<br>
<br><br> // export the data into the array<br> short *data = new short[memsize/sizeof(short)];<br> exporter->Export(data);<br> <br> // alternative method for getting data<br> // short *data = exporter->GetPointerToData(); <br>
<br> // do a little something to the data<br><br> for (i = 0; i < dimensions[2]; i++)<br> {<br> for (j = 0; j < dimensions[1]; j++)<br> {<br> for (k = 0; k < dimensions[0]; k++)<br> {<br> if (k % 10 == 0)<br>
{<br> data[k + dimensions[0]*(j + dimensions[1]*i)] = 0;<br> }<br> if (j % 10 == 0)<br> {<br> data[k + dimensions[0]*(j + dimensions[1]*i)] = 1000;<br> }<br> }<br>
}<br> }<br><br> // create an importer to read the data back in<br> vtkImageImport *importer = vtkImageImport::New();<br> importer->SetWholeExtent(1,dimensions[0],1,dimensions[1],1,dimensions[2]);<br> importer->SetDataExtentToWholeExtent();<br>
importer->SetDataScalarTypeToShort();<br> importer->SetImportVoidPointer(data);<br><br><br> vtkImageViewer *viewer = vtkImageViewer::New();<br> viewer->SetInputConnection(importer->GetOutputPort());<br> viewer->SetZSlice(45);<br>
viewer->SetColorWindow(2000);<br> viewer->SetColorLevel(1000);<br><br> viewer->Render();<br><br> int retVal = vtkRegressionTestImage( viewer->GetRenderWindow() );<br> <br> viewer->Delete();<br> importer->Delete();<br>
exporter->Delete();<br> reader->Delete();<br> <br> delete [] data;<br><br> return !retVal;<br>}<br><br>However when i change the image reader to make use of any other reader (jpeg, bmp, tiff, or png) the image does not<br>
render correctly. Im assume that this is due to the images im using having three scalar componenets?<br><br>vtkJPEGReader *reader = vtkJPEGReader::New();<br>reader->SetDataByteOrderToLittleEndian();<br>reader->SetFileName(fileName); // Load the image into the image reader.<br>
reader->ImageLowerLeftOn();<br>reader->Update();<br>reader->Print(std::cout);<br><br>Im not looking for a full worked solution for anyone, just hoping that someone could point me in a direction that could help me out alittle.<br>
<br>The reason I need to export the images is to run some external transformations on the images, after going through several of the amazing VTK filters. This<br>needs to be read back into VTK to perform some nice 3D modelling and then redendering.<br>
<br>When I export then Import (without any modification) the image come back in red and blue colouring, but the image is not rendereded correctly. Each of the<br>rows of pixels get rendered at a strange location on the screen.<br>
<br>Thank you for taking the time to read this email, I hope i gave enough light into my problem for someone to give some advice.<br><br>Regards<br>Andrew Rapson<br></div>