iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ImageReader.H
Go to the documentation of this file.
1 /*! @file
2  @author Randolph Voorhies
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 
36 #ifndef INCLUDE_NRT_IMAGEPROC_IO_IMAGESOURCE_IMAGEREADERS_IMAGEREADER_H
37 #define INCLUDE_NRT_IMAGEPROC_IO_IMAGESOURCE_IMAGEREADERS_IMAGEREADER_H
38 
41 
42 namespace nrt
43 {
44  //! A Singleton Factory used to keep track of image readers used by readImage().
45  /*! Developers who wish to create their own image reader methods should
46  register them with the NRT_REGISTER_IMAGE_READER macro so that they may be
47  recognized by readImage()*/
48  typedef Factory<
49  std::function<GenericImage(std::string const&)>,
50  std::string,
51  std::function<std::function<GenericImage(std::string const&)>()>,
52  std::map<std::string, std::string>
54 
55  //! Read the image file found at the given filename
56  /*! This method is the best way for users to read images from files. When given
57  a filename, this method will ensure that the file exists, and will then
58  attempt to read the image using an appropriate image reader method found by
59  querying the ImageReaderFactory. */
60  GenericImage const readImage(std::string const& filename);
61 }
62 
63 /*! \def NRT_REGISTER_IMAGE_READER(FUNCTIONNAME, EXTENSIONS)
64  Register an ImageReader with a global Factory.
65 
66  When creating a new free function to parse an image file type, you may
67  register that function with the ImageReaderFactory so that your new parser
68  will be called whenever users call readImage, or try to open your associated
69  type with an ImageSource.
70 
71  \relates readImage()
72  \relates ImageFilesSource
73  \relates ImageSource
74 */
75 #define NRT_REGISTER_IMAGE_READER(FUNCTIONNAME, EXTENSIONS) \
76  std::function<nrt::GenericImage(std::string const&)> create##FUNCTIONNAME() \
77  { return FUNCTIONNAME; } \
78  bool imageReaderRegister##FUNCTIONNAME() \
79  { \
80  nrt::ImageReaderFactory::instance().registerType( \
81  EXTENSIONS, \
82  create##FUNCTIONNAME); \
83  return true; \
84  } \
85  const bool FUNCTIONNAME##Registered __attribute__ ((unused)) = \
86  imageReaderRegister##FUNCTIONNAME(); \
87 
88 
89 #endif // INCLUDE_NRT_IMAGEPROC_IO_IMAGESOURCE_IMAGEREADERS_IMAGEREADER_H