00001 // **************************************************************************** 00002 // This file is part of the Integrating Vision Toolkit (IVT). 00003 // 00004 // The IVT is maintained by the Karlsruhe Institute of Technology (KIT) 00005 // (www.kit.edu) in cooperation with the company Keyetech (www.keyetech.de). 00006 // 00007 // Copyright (C) 2014 Karlsruhe Institute of Technology (KIT). 00008 // All rights reserved. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are met: 00012 // 00013 // 1. Redistributions of source code must retain the above copyright 00014 // notice, this list of conditions and the following disclaimer. 00015 // 00016 // 2. Redistributions in binary form must reproduce the above copyright 00017 // notice, this list of conditions and the following disclaimer in the 00018 // documentation and/or other materials provided with the distribution. 00019 // 00020 // 3. Neither the name of the KIT nor the names of its contributors may be 00021 // used to endorse or promote products derived from this software 00022 // without specific prior written permission. 00023 // 00024 // THIS SOFTWARE IS PROVIDED BY THE KIT AND CONTRIBUTORS “AS IS” AND ANY 00025 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00026 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 // DISCLAIMED. IN NO EVENT SHALL THE KIT OR CONTRIBUTORS BE LIABLE FOR ANY 00028 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00029 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00030 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00031 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00033 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 // **************************************************************************** 00035 // **************************************************************************** 00036 // Filename: ByteImage.h 00037 // Author: Pedram Azad 00038 // Date: 2004 00039 // **************************************************************************** 00040 // Changes: 24.07.2008, Miguel Bernal Marin 00041 // * Added methods LoadFromFilePNM and SaveToFilePNM 00042 // **************************************************************************** 00054 #ifndef __BYTE_IMAGE_H__ 00055 #define __BYTE_IMAGE_H__ 00056 00057 00058 00059 // **************************************************************************** 00060 // CByteImage 00061 // **************************************************************************** 00062 00080 class CByteImage 00081 { 00082 public: 00086 enum ImageType 00087 { 00089 eGrayScale, 00091 eRGB24, 00093 eRGB24Split 00094 }; 00095 00096 00104 CByteImage(); 00105 00120 CByteImage(int nImageWidth, int nImageHeight, ImageType imageType, bool bHeaderOnly = false); 00121 00134 CByteImage(const CByteImage *pImage, bool bHeaderOnly = false); 00135 00148 CByteImage(const CByteImage &image, bool bHeaderOnly = false); 00149 00153 ~CByteImage(); 00154 00155 00156 // public methods 00157 00172 void Set(int nImageWidth, int nImageHeight, ImageType imageType, bool bHeaderOnly = false); 00173 00180 bool IsCompatible(const CByteImage *pImage) const; 00181 00193 bool LoadFromFile(const char *pFileName); 00194 00207 bool SaveToFile(const char *pFileName) const; 00208 00209 00210 00211 private: 00212 // private structs 00213 struct myBITMAPFILEHEADER 00214 { 00215 unsigned short bfType; 00216 unsigned int bfSize; 00217 unsigned short bfReserved1; 00218 unsigned short bfReserved2; 00219 unsigned int bfOffBits; 00220 }; 00221 00222 struct myBITMAPINFOHEADER 00223 { 00224 unsigned int biSize; 00225 unsigned int biWidth; 00226 int biHeight; 00227 unsigned short biPlanes; 00228 unsigned short biBitCount; 00229 unsigned int biCompression; 00230 unsigned int biSizeImage; 00231 unsigned int biXPelsPerMeter; 00232 unsigned int biYPelsPerMeter; 00233 unsigned int biClrUsed; 00234 unsigned int biClrImportant; 00235 }; 00236 00237 // private methods 00238 void FreeMemory(); 00239 00240 bool LoadFromFilePNM(const char *pFileName); 00241 bool SaveToFilePNM(const char *pFileName) const; 00242 00243 bool LoadFromFileBMP(const char *pFileName); 00244 bool SaveToFileBMP(const char *pFileName) const; 00245 00246 00247 public: 00248 // public attributes - not clean OOP design but easy access 00249 00257 int width; 00258 00264 int height; 00265 00273 int bytesPerPixel; 00274 00283 unsigned char *pixels; 00284 00292 ImageType type; 00293 00301 bool m_bOwnMemory; 00302 }; 00303 00304 00305 00306 #endif /* __BYTE_IMAGE_H__ */