]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOImageReader.h
Feature #1764
[creaImageIO.git] / src / creaImageIOImageReader.h
index 2ac860f33e90b1d20ad03e7b3adc67677e244d86..80e30fb08781427cda051380aecc53f8c1c74522 100644 (file)
@@ -1,51 +1,92 @@
-#ifndef __creaImageIOImageReader_h_INCLUDED__
-#define __creaImageIOImageReader_h_INCLUDED__
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
+#                        pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and 
+#  abiding by the rules of distribution of free software. You can  use, 
+#  modify and/ or redistribute the software under the terms of the CeCILL-B 
+#  license as circulated by CEA, CNRS and INRIA at the following URL 
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability. 
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------
+*/
 
 
-#include <creaImageIODicomNode.h>
+#ifndef __creaImageIOImageReader_h_INCLUDED__
+#define __creaImageIOImageReader_h_INCLUDED__
 
-#include <vtkImageData.h>
-#include <string>
-#include <vector>
+#include <creaImageIOSystem.h>
+#include <creaImageIOAbstractImageReader.h>
 
 namespace creaImageIO
 {
 
-
-  //=====================================================================
-  class SpecificImageReader;
-  //=====================================================================
-
-  //=====================================================================
-  class ImageReader
+  /**
+   * \ingroup IO
+   * \brief Generic image reader which uses all the specific concrete image reader of the lib (tif, jpg, dicom, ...)
+   */
+  class CREAIMAGEIO_EXPORT ImageReader : virtual public AbstractImageReader
   {
   public:
     ImageReader();
     ~ImageReader();
 
-    // Returns the known extensions
-    /*static*/ const std::vector<std::string>& GetKnownExtensions()  
-    { return mKnownExtensions; }
-    // Returns true iff the file is readable
-    /*static*/ bool CanRead( const std::string& filename, 
-                        const std::string& exclude = "");
-    // Reads the file. Returns an "Unreadable image" picture if fails
-    /*static*/ vtkImageData* Read( const std::string& filename,
-                              const std::string& exclude = "");
+    /// Pushes back all kwown extensions (without dot) in the vector given
+    void PushBackExtensions(std::vector<std::string>&);
+
+    /// Returns true iff the file is readable
+    bool CanRead( const std::string& filename);
+    /// Reads and returns the image data. 
+    /// Returns an "Unreadable image" picture if fails
+    vtkImageData* ReadImage( const std::string& filename);
+    
+    /// Reads the attributes of the image.
+    /// Requested attributes names are provided as keys 
+    /// in a string to string map
+    /// On return, the values of the map are the values 
+    /// of the attributes (empty string if not available).
+    void ReadAttributes(const std::string& filename, 
+                       tree::AttributeMapType& attr);
+
+    /// Exclude specific readers 
+    /// TO DO...
+       /// Another function to read attributes for a file
+       void getAttributes(const std::string filename,
+               std::map <std::string , std::string> &infos, std::vector<std::string> i_attr);
+    
 
-    void ReadDicomInfo(const std::string& filename, 
-                      DicomNode* image);
 
   protected:
     
-    /*static*/ void Register(SpecificImageReader*);
+    /// Register a reader
+    void Register( boost::shared_ptr<AbstractImageReader> );
+
+       std::vector<boost::shared_ptr<AbstractImageReader> > mReader;
+    vtkImageData* mUnreadableImage;
+
+    std::string mLastFilename;
+       boost::shared_ptr<AbstractImageReader> mLastReader;
+
+       bool ShallNotRead( const std::string& filename );
 
-    /*static*/ std::vector<SpecificImageReader*> mReader;
-    /*static*/ std::vector<std::string> mKnownExtensions;
-    /*static*/ vtkImageData* mUnreadableImage;
+       void UnRegister(const std::string i_val);
 
-    /*static*/ std::string mLastFilename;
-    /*static*/ SpecificImageReader* mLastReader;
+       std::vector <std::string> mUnReader;
     
   private: