1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 // 5 // By downloading, copying, installing or using the software you agree to this license. 6 // If you do not agree to this license, do not download, install, 7 // copy or use the software. 8 // 9 // 10 // Intel License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2000, Intel Corporation, all rights reserved. 14 // Third party copyrights are property of their respective owners. 15 // 16 // Redistribution and use in source and binary forms, with or without modification, 17 // are permitted provided that the following conditions are met: 18 // 19 // * Redistribution's of source code must retain the above copyright notice, 20 // this list of conditions and the following disclaimer. 21 // 22 // * Redistribution's in binary form must reproduce the above copyright notice, 23 // this list of conditions and the following disclaimer in the documentation 24 // and/or other materials provided with the distribution. 25 // 26 // * The name of Intel Corporation may not be used to endorse or promote products 27 // derived from this software without specific prior written permission. 28 // 29 // This software is provided by the copyright holders and contributors "as is" and 30 // any express or implied warranties, including, but not limited to, the implied 31 // warranties of merchantability and fitness for a particular purpose are disclaimed. 32 // In no event shall the Intel Corporation or contributors be liable for any direct, 33 // indirect, incidental, special, exemplary, or consequential damages 34 // (including, but not limited to, procurement of substitute goods or services; 35 // loss of use, data, or profits; or business interruption) however caused 36 // and on any theory of liability, whether in contract, strict liability, 37 // or tort (including negligence or otherwise) arising in any way out of 38 // the use of this software, even if advised of the possibility of such damage. 39 // 40 //M*/ 41 42 #ifndef _GRFMT_BASE_H_ 43 #define _GRFMT_BASE_H_ 44 45 #if _MSC_VER >= 1200 46 #pragma warning( disable: 4514 ) 47 #pragma warning( disable: 4711 ) 48 #pragma warning( disable: 4611 ) 49 #endif 50 51 #include "utils.h" 52 #include "bitstrm.h" 53 54 #define RBS_BAD_HEADER -125 /* invalid image header */ 55 #define BAD_HEADER_ERR() goto bad_header_exit 56 57 #ifndef _MAX_PATH 58 #define _MAX_PATH 1024 59 #endif 60 61 62 ///////////////////////////////// base class for readers //////////////////////// 63 class GrFmtReader 64 { 65 public: 66 67 GrFmtReader( const char* filename ); 68 virtual ~GrFmtReader(); 69 GetWidth()70 int GetWidth() { return m_width; }; GetHeight()71 int GetHeight() { return m_height; }; IsColor()72 bool IsColor() { return m_iscolor; }; GetDepth()73 int GetDepth() { return m_bit_depth; }; UseNativeDepth(bool yes)74 void UseNativeDepth( bool yes ) { m_native_depth = yes; }; IsFloat()75 bool IsFloat() { return m_isfloat; }; 76 77 virtual bool ReadHeader() = 0; 78 virtual bool ReadData( uchar* data, int step, int color ) = 0; 79 virtual void Close(); 80 81 protected: 82 83 bool m_iscolor; 84 int m_width; // width of the image ( filled by ReadHeader ) 85 int m_height; // height of the image ( filled by ReadHeader ) 86 int m_bit_depth;// bit depth per channel (normally 8) 87 char m_filename[_MAX_PATH]; // filename 88 bool m_native_depth;// use the native bit depth of the image 89 bool m_isfloat; // is image saved as float or double? 90 }; 91 92 93 ///////////////////////////// base class for writers //////////////////////////// 94 class GrFmtWriter 95 { 96 public: 97 98 GrFmtWriter( const char* filename ); ~GrFmtWriter()99 virtual ~GrFmtWriter() {}; 100 virtual bool IsFormatSupported( int depth ); 101 virtual bool WriteImage( const uchar* data, int step, 102 int width, int height, int depth, int channels ) = 0; 103 protected: 104 char m_filename[_MAX_PATH]; // filename 105 }; 106 107 108 ////////////////////////////// base class for filter factories ////////////////// 109 class GrFmtFilterFactory 110 { 111 public: 112 113 GrFmtFilterFactory(); ~GrFmtFilterFactory()114 virtual ~GrFmtFilterFactory() {}; 115 GetDescription()116 const char* GetDescription() { return m_description; }; GetSignatureLength()117 int GetSignatureLength() { return m_sign_len; }; 118 virtual bool CheckFile( const char* filename ); 119 virtual bool CheckSignature( const char* signature ); 120 virtual bool CheckExtension( const char* filename ); 121 virtual GrFmtReader* NewReader( const char* filename ) = 0; 122 virtual GrFmtWriter* NewWriter( const char* filename ) = 0; 123 124 protected: 125 const char* m_description; 126 // graphic format description in form: 127 // <Some textual description>( *.<extension1> [; *.<extension2> ...]). 128 // the textual description can not contain symbols '(', ')' 129 // and may be, some others. It is safe to use letters, digits and spaces only. 130 // e.g. "Targa (*.tga)", 131 // or "Portable Graphic Format (*.pbm;*.pgm;*.ppm)" 132 133 int m_sign_len; // length of the signature of the format 134 const char* m_signature; // signature of the format 135 }; 136 137 138 /////////////////////////// list of graphic format filters /////////////////////////////// 139 140 typedef void* ListPosition; 141 142 class GrFmtFactoriesList 143 { 144 public: 145 146 GrFmtFactoriesList(); 147 virtual ~GrFmtFactoriesList(); 148 void RemoveAll(); 149 bool AddFactory( GrFmtFilterFactory* factory ); FactoriesCount()150 int FactoriesCount() { return m_curFactories; }; 151 ListPosition GetFirstFactoryPos(); 152 GrFmtFilterFactory* GetNextFactory( ListPosition& pos ); 153 virtual GrFmtReader* FindReader( const char* filename ); 154 virtual GrFmtWriter* FindWriter( const char* filename ); 155 156 protected: 157 158 GrFmtFilterFactory** m_factories; 159 int m_maxFactories; 160 int m_curFactories; 161 }; 162 163 #endif/*_GRFMT_BASE_H_*/ 164