PfzParser.H

Go to the documentation of this file.
00001 /*!@file Raster/PfzParser.H Parse pfm image files. */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the //
00005 // University of Southern California (USC) and the iLab at USC.         //
00006 // See http://iLab.usc.edu for information about this project.          //
00007 // //////////////////////////////////////////////////////////////////// //
00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected //
00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency //
00010 // in Visual Environments, and Applications'' by Christof Koch and      //
00011 // Laurent Itti, California Institute of Technology, 2001 (patent       //
00012 // pending; application number 09/912,225 filed July 23, 2001; see      //
00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status).     //
00014 // //////////////////////////////////////////////////////////////////// //
00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit.       //
00016 //                                                                      //
00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can   //
00018 // redistribute it and/or modify it under the terms of the GNU General  //
00019 // Public License as published by the Free Software Foundation; either  //
00020 // version 2 of the License, or (at your option) any later version.     //
00021 //                                                                      //
00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope  //
00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the   //
00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
00025 // PURPOSE.  See the GNU General Public License for more details.       //
00026 //                                                                      //
00027 // You should have received a copy of the GNU General Public License    //
00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write   //
00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   //
00030 // Boston, MA 02111-1307 USA.                                           //
00031 // //////////////////////////////////////////////////////////////////// //
00032 //
00033 // Primary maintainer for this file: T. Nathan Mundhenk <mundhenk@usc.edu>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Raster/PfzParser.H $
00035 // $Id: PfzParser.H 6795 2006-06-29 20:45:32Z rjpeters $
00036 //
00037 
00038 #ifndef PFZPARSER_H_DEFINED
00039 #define PFZPARSER_H_DEFINED
00040 
00041 #define PFZ_CHUNK 262144
00042 
00043 #include "Image/Dims.H"
00044 #include "Raster/RasterParser.H"
00045 #include "Util/Types.H"
00046 #include "Util/Promotions.H"
00047 #include <zlib.h>
00048 
00049 #include <string>
00050 #include <sstream>
00051 
00052 template <class T> class Image;
00053 template <class T> class PixRGB;
00054 
00055 // ######################################################################
00056 //! This class handles reading/parsing of PFM image files.
00057 /*! PFM is an unofficial format that looks very much like PGM except
00058   that raw pixel values are floats. Caution, this is not portable
00059   across endianness. The PNM magic for this unofficial format is
00060   PF. */
00061 class PfzParser : public RasterParser
00062 {
00063 public:
00064   //! Initialize with a PGM or PPM file (either is OK).
00065   PfzParser(const char* fname);
00066 
00067   //! Destructor.
00068   virtual ~PfzParser();
00069 
00070   //! Get the specifications of the image without fully reading it
00071   virtual GenericFrameSpec getFrameSpec() const;
00072 
00073   //! Get the comments from the image without fully reading it
00074   virtual std::string getComments() const;
00075 
00076   //! Get image tags if the image supports them
00077   virtual uint getTagCount() const;
00078 
00079   //! Get image tags if the image supports them
00080   virtual bool getTag(uint tag, std::string &name, std::string &value) const;
00081 
00082   //! Get a GenericFrame representation from the raster file.
00083   /*! This can subsequently be converted to rgb, grayscale,
00084       floating-point, or video-yuv. */
00085   virtual GenericFrame getFrame();
00086 
00087 private:
00088   //! Read the actual bytes out of the file.
00089   /*! This works for any supported mode or file type. */
00090   void readFloats(float* space, int count);
00091 
00092   //! Parse a float grayscale image
00093   Image<float> parseFloat();
00094 
00095   PfzParser(const PfzParser&);
00096   PfzParser& operator=(const PfzParser&);
00097 
00098   struct Rep;
00099   Rep* const rep;
00100   z_stream zstrm;
00101   unsigned char buff_uin[PFZ_CHUNK];
00102   unsigned char buff_uout[PFZ_CHUNK];
00103 
00104 };
00105 
00106 // ######################################################################
00107 /* So things look consistent in everyone's emacs... */
00108 /* Local Variables: */
00109 /* indent-tabs-mode: nil */
00110 /* End: */
00111 
00112 #endif // !PFMPARSER_H_DEFINED
Generated on Sun May 8 08:41:16 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3