iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ImageWriter.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_IMAGESINK_IMAGEWRITERS_IMAGEWRITER_H
37 #define INCLUDE_NRT_IMAGEPROC_IO_IMAGESINK_IMAGEWRITERS_IMAGEWRITER_H
38 
42 
43 namespace nrt
44 {
45  //! A Singleton Factory used to keep track of image writers used by writeImage().
46  /*! Developers who wish to create their own image writer methods should
47  register them with the NRT_REGISTER_IMAGE_WRITER macro so that they may be
48  recognized by writeImage()*/
49  typedef Factory<
50  std::function<void(GenericImage const,std::string const&)>,
51  std::string,
52  std::function<std::function<void(GenericImage const, std::string const&)>()>,
53  std::map<std::string, std::string>
55 
56  //! Write the image file found at the given filename
57  /*! This method is the best way for users to write images to files. When given
58  a filename, this method will ensure that the path exists, and will then
59  attempt to write the image using an appropriate image writer method found by
60  querying the ImageWriterFactory. */
61  void writeImage(GenericImage const img, std::string const& filename);
62 }
63 
64 /*! \def NRT_REGISTER_IMAGE_WRITER(FUNCTIONNAME, EXTENSIONS)
65  Register an ImageWriter with a global Factory.
66 
67  When creating a new free function to write an image file type, you may
68  register that function with the ImageWriterFactory so that your new writer
69  will be called whenever users call writeImage, or try to open your associated
70  type with an ImageSource.
71 
72  \relates writeImage()
73  \relates ImageFilesSink
74  \relates ImageSink
75 */
76 #define NRT_REGISTER_IMAGE_WRITER(FUNCTIONNAME, EXTENSIONS) \
77  std::function<void(nrt::GenericImage const, std::string const&)> create##FUNCTIONNAME() \
78  { return FUNCTIONNAME; } \
79  bool imageWriterRegister##FUNCTIONNAME() \
80  { \
81  nrt::ImageWriterFactory::instance().registerType( \
82  EXTENSIONS, \
83  create##FUNCTIONNAME); \
84  return true; \
85  } \
86  const bool FUNCTIONNAME##Registered __attribute__ ((unused)) = \
87  imageWriterRegister##FUNCTIONNAME(); \
88 
89 
90 #endif // INCLUDE_NRT_IMAGEPROC_IO_IMAGESINK_IMAGEWRITERS_IMAGEWRITER_H