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