]> Creatis software - gdcm.git/commitdiff
* Test/ShowDicom.cxx : now can be used with an off-screen rendering to
authorregrain <regrain>
Tue, 30 Nov 2004 15:44:43 +0000 (15:44 +0000)
committerregrain <regrain>
Tue, 30 Nov 2004 15:44:43 +0000 (15:44 +0000)
     avoid problems (otherwise, the difference test between the visible image
     and the reference is incorrect. If the reference is greater than the
     screen resolution, it's produce errors).
     Can be used for only one image. Can be used with a visible flag.
   * vtk/vtkGdcmReader.cxx : remove commented codes.
   * vtk/vtkGdcmReader.h : add the gdcmCommon.h include file to avoid warnings
     under windows at compilation
   * vtk/vtkgdcmViewer.cxx : reformat the file. Apply a default window/level
     for grayscale images
   * vtk/GdcmToBaseline.cxx : new program to easy create the reference image
   -- BeNours

ChangeLog
vtk/CMakeLists.txt
vtk/GdcmToBaseline.cxx [new file with mode: 0644]
vtk/vtkGdcmReader.cxx
vtk/vtkGdcmReader.h
vtk/vtkgdcmViewer.cxx

index 5b20d42a66f3d81b91faf7ad5512555732b3ecc0..95b9e9b8be32b1d39f575fac731b133b8c42d58a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2004-11-30 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+   * Test/ShowDicom.cxx : now can be used with an off-screen rendering to
+     avoid problems (otherwise, the difference test between the visible image
+     and the reference is incorrect. If the reference is greater than the
+     screen resolution, it's produce errors).
+     Can be used for only one image. Can be used with a visible flag.
+   * vtk/vtkGdcmReader.cxx : remove commented codes.
+   * vtk/vtkGdcmReader.h : add the gdcmCommon.h include file to avoid warnings
+     under windows at compilation
+   * vtk/vtkgdcmViewer.cxx : reformat the file. Apply a default window/level
+     for grayscale images
+   * vtk/GdcmToBaseline.cxx : new program to easy create the reference image
+
 2004-11-30 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
    * src/gdcmFile.[h|cxx] : bug fix for ACR-LIBIDO files when writting the file
    * Test/TestAllReadCompareDicom.cxx, TestReadWriteReadCompare.cxx : add
index a7f2b73dd17fd9bd025f89d1c08ee7548b179697..c3b68cc298440fa2b1004edd1fa51f10c72dabda 100644 (file)
@@ -46,6 +46,19 @@ TARGET_LINK_LIBRARIES(vtkgdcmViewer
   vtkRendering
 )
 
+#-----------------------------------------------------------------------------
+SET(GdcmToBaseline_SOURCES
+  GdcmToBaseline.cxx
+)
+ADD_EXECUTABLE(GdcmToBaseline ${GdcmToBaseline_SOURCES})
+TARGET_LINK_LIBRARIES(GdcmToBaseline
+  vtkgdcm
+  vtkIO
+  vtkImaging
+  vtkRendering
+)
+
+#-----------------------------------------------------------------------------
 # Install vtk header
 INSTALL_FILES(/include FILES vtkGdcmReader.h)
 
diff --git a/vtk/GdcmToBaseline.cxx b/vtk/GdcmToBaseline.cxx
new file mode 100644 (file)
index 0000000..2f5abb6
--- /dev/null
@@ -0,0 +1,92 @@
+/*=========================================================================
+                                                                                
+  Program:   gdcm
+  Module:    $RCSfile: GdcmToBaseline.cxx,v $
+  Language:  C++
+  Date:      $Date: 2004/11/30 15:44:44 $
+  Version:   $Revision: 1.1 $
+                                                                                
+  Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+  l'Image). All rights reserved. See Doc/License.txt or
+  http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html 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 notices for more information.
+                                                                                
+=========================================================================*/
+#include "vtkGdcmReader.h"
+#include "vtkImageViewer.h"
+#include "vtkImageData.h"
+#include "vtkPNGWriter.h"
+#include "vtkWindowToImageFilter.h"
+
+
+
+
+#include "gdcmFile.h"
+
+#include <iostream>
+
+//Generated file:
+#include "gdcmDataImages.h"
+
+int main(int argc, char *argv[])
+{
+   if( argc < 3 )
+   {
+      std::cerr << "Usage: " << argv[0] << " image.dcm image.png\n";
+      return 0;
+   }
+
+   std::string filename = argv[1];
+   std::cout << "Filename: " << filename << std::endl;
+
+   //Extract name to find the png file matching:
+   std::string pngfile = argv[2];
+   std::cerr << "PNG file: " << pngfile << std::endl;
+   // Ok for now still use the original image, 
+   vtkGdcmReader *reader = vtkGdcmReader::New();
+   reader->SetFileName( filename.c_str() );
+   //reader->SetFileName( "../Testing/Temporary/TestWrite.dcm" );
+   reader->Update();
+
+   vtkImageViewer *viewer = vtkImageViewer::New();
+   viewer->SetInput ( reader->GetOutput() );
+
+   vtkFloatingPointType *range = reader->GetOutput()->GetScalarRange();
+   viewer->SetColorWindow (range[1] - range[0]);
+   viewer->SetColorLevel (0.5 * (range[1] + range[0]));
+
+   int dim[3];
+   reader->GetOutput()->GetDimensions( dim );
+   viewer->SetSize(dim[0], dim[1]);
+   viewer->OffScreenRenderingOn();
+   if(dim[2] != 1)
+   {
+      //For multifame dicom, take a snapshot of the center slice (+/- 1)
+      viewer->SetZSlice( dim[2] / 2 );
+   }
+
+   viewer->Render();
+
+   // View to image
+   vtkWindowToImageFilter *wif = vtkWindowToImageFilter::New();
+   wif->SetInput(viewer->GetRenderWindow());
+
+   // Write to image
+   vtkPNGWriter *writer=vtkPNGWriter::New();
+   writer->SetFileName(argv[2]);
+   writer->SetInput(wif->GetOutput());
+   writer->Write();
+
+   // Clean up:
+   reader->Delete();
+   viewer->Delete();
+   wif->Delete();
+   writer->Delete();
+
+   return 0;
+}
index 4922c856c0b799c2cd7aa99945479ed0690c0c46..a704502332df4a54f91b6cb52f02bdf635969a10 100644 (file)
@@ -58,7 +58,7 @@
 #include <vtkPointData.h>
 #include <vtkLookupTable.h>
 
-vtkCxxRevisionMacro(vtkGdcmReader, "$Revision: 1.56 $");
+vtkCxxRevisionMacro(vtkGdcmReader, "$Revision: 1.57 $");
 vtkStandardNewMacro(vtkGdcmReader);
 
 //-----------------------------------------------------------------------------
@@ -278,7 +278,7 @@ void vtkGdcmReader::ExecuteData(vtkDataObject *output)
       unsigned long UpdateProgressCount = 0;
 
       // Feeling the allocated memory space with each image/volume:
-      unsigned char *Dest = (unsigned char *)data->GetPointData()->GetScalars()->GetVoidPointer(0);
+      unsigned char *Dest = (unsigned char *)data->GetScalarPointer();
       for (std::list<std::string>::iterator filename  = InternalFileNameList.begin();
            filename != InternalFileNameList.end();
            ++filename)
@@ -688,14 +688,6 @@ size_t vtkGdcmReader::LoadImageInMemory(
 //   fwrite(Dest,size,1,f2);
 //   fclose(f2); 
    
-   //GetImageData allocate a (void*)malloc, remove it:
-
-   // CLEANME
-   // Now, the delete on values keep from GetImageData is useless (made in
-   // the PixelConvert class)
-
-//   unsigned char * pSource     = source; //pointer for later deletion
-//   delete[] pSource;
    return size;
 }
 
index d5b86bdb61883fb6e319d99b33ed25d76e364762..d3ca650a63cb679214c6b2b468e4e346cf6fd388 100644 (file)
@@ -3,6 +3,8 @@
 #ifndef __vtkGdcmReader_h
 #define __vtkGdcmReader_h
 
+#include "gdcmCommon.h" // To avoid warnings concerning the std
+
 #include <vtkImageReader.h>
 #include <list>
 #include <string>
index 3f64b40b02ff95ccde180c0206b822613959b4c9..d70d49447f1f26a10cf5b0387e509568f72b21b2 100644 (file)
 // Callback for the interaction
 class vtkgdcmObserver : public vtkCommand
 {
-  public:
-  virtual char const *GetClassName() const { return "vtkgdcmObserver";}
-  static vtkgdcmObserver *New() 
-    { return new vtkgdcmObserver; }
-  vtkgdcmObserver()
-    {
+public:
+   virtual char const *GetClassName() const 
+   { 
+      return "vtkgdcmObserver";
+   }
+   static vtkgdcmObserver *New() 
+   { 
+      return new vtkgdcmObserver; 
+   }
+   vtkgdcmObserver()
+   {
       this->ImageViewer = NULL;
-    }
-  virtual void Execute(vtkObject *, unsigned long event, void* )
-    {
+   }
+   virtual void Execute(vtkObject *, unsigned long event, void* )
+   {
       if ( this->ImageViewer )
-        {
-          if ( event == vtkCommand::CharEvent )
-          {
+      {
+         if ( event == vtkCommand::CharEvent )
+         {
             int max = ImageViewer->GetWholeZMax();
             int slice = (ImageViewer->GetZSlice() + 1 ) % ++max;
             ImageViewer->SetZSlice( slice );
             ImageViewer->GetRenderer()->ResetCameraClippingRange();
             ImageViewer->Render();
-          }
-        }
-    }
-    vtkImageViewer2 *ImageViewer;
+         }
+      }
+   }
+   vtkImageViewer2 *ImageViewer;
 };
 
 
 int main(int argc, char *argv[])
 {
-  if( argc < 2 )
-    return 0;
+   if( argc < 2 )
+      return 0;
   
-  vtkGdcmReader *reader = vtkGdcmReader::New();
-  reader->AllowLookupTableOff();
+   vtkGdcmReader *reader = vtkGdcmReader::New();
+   reader->AllowLookupTableOff();
 
-  if( argc == 2 )
-    reader->SetFileName( argv[1] );
-  else
-    for(int i=1; i< argc; i++)
-      reader->AddFileName( argv[i] );
+   if( argc == 2 )
+      reader->SetFileName( argv[1] );
+   else
+      for(int i=1; i< argc; i++)
+         reader->AddFileName( argv[i] );
 
-  reader->DebugOn();
-  reader->Update();
-  
-  //print debug info:
-  reader->GetOutput()->Print( cout );
-        
-  vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
+   reader->Update();
 
-  vtkImageViewer2 *viewer = vtkImageViewer2::New();
-  
-  if( reader->GetLookupTable() )
-  {
-    //convert to color:
-    vtkImageMapToColors *map = vtkImageMapToColors::New ();
-    map->SetInput (reader->GetOutput());
-    map->SetLookupTable (reader->GetLookupTable());
-    map->SetOutputFormatToRGB();
-    viewer->SetInput ( map->GetOutput() );
-    map->Delete();
-  }
-  else
-  {
-    viewer->SetInput ( reader->GetOutput() );
-  }
-  viewer->SetupInteractor (iren);
-  
-  //vtkFloatingPointType *range = reader->GetOutput()->GetScalarRange();
-  //viewer->SetColorWindow (range[1] - range[0]);
-  //viewer->SetColorLevel (0.5 * (range[1] + range[0]));
-
-  // Here is where we setup the observer, 
-  vtkgdcmObserver *obs = vtkgdcmObserver::New();
-  obs->ImageViewer = viewer;
-  iren->AddObserver(vtkCommand::CharEvent,obs);
-  obs->Delete();
-
-  iren->Initialize();
-  iren->Start();
-
-  //if you wish you can export dicom to a vtk file  
-  vtkStructuredPointsWriter *writer = vtkStructuredPointsWriter::New();
-  writer->SetInput( reader->GetOutput());
-  writer->SetFileName( "foo.vtk" );
-  writer->SetFileTypeToBinary();
-  writer->Write();
-
-  reader->Delete();
-  iren->Delete();
-  viewer->Delete();
-  writer->Delete();
+   //print debug info:
+   reader->GetOutput()->Print( cout );
+
+   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
+
+   vtkImageViewer2 *viewer = vtkImageViewer2::New();
+
+   if( reader->GetLookupTable() )
+   {
+      //convert to color:
+      vtkImageMapToColors *map = vtkImageMapToColors::New ();
+      map->SetInput (reader->GetOutput());
+      map->SetLookupTable (reader->GetLookupTable());
+      map->SetOutputFormatToRGB();
+      viewer->SetInput ( map->GetOutput() );
+      map->Delete();
+   }
+   else
+   {
+      double *range = reader->GetOutput()->GetScalarRange();
+      viewer->SetColorLevel (0.5 * (range[1] + range[0]));
+      viewer->SetColorWindow (range[1] - range[0]);
+
+      viewer->SetInput ( reader->GetOutput() );
+   }
+   viewer->SetupInteractor (iren);
   
-  return 0;
+   //vtkFloatingPointType *range = reader->GetOutput()->GetScalarRange();
+   //viewer->SetColorWindow (range[1] - range[0]);
+   //viewer->SetColorLevel (0.5 * (range[1] + range[0]));
+
+   // Here is where we setup the observer, 
+   vtkgdcmObserver *obs = vtkgdcmObserver::New();
+   obs->ImageViewer = viewer;
+   iren->AddObserver(vtkCommand::CharEvent,obs);
+   obs->Delete();
+
+   iren->Initialize();
+   iren->Start();
+
+   //if you wish you can export dicom to a vtk file  
+   vtkStructuredPointsWriter *writer = vtkStructuredPointsWriter::New();
+   writer->SetInput( reader->GetOutput());
+   writer->SetFileName( "foo.vtk" );
+   writer->SetFileTypeToBinary();
+   writer->Write();
+
+   reader->Delete();
+   iren->Delete();
+   viewer->Delete();
+   writer->Delete();
+
+   return 0;
 }