00001 /*! @file Image/SimpleFont.H simple raster font definition */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005 // 00005 // by the 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 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Image/SimpleFont.H $ 00035 // $Id: SimpleFont.H 8117 2007-03-15 21:06:28Z rjpeters $ 00036 00037 #ifndef IMAGE_SIMPLEFONT_H_DEFINED 00038 #define IMAGE_SIMPLEFONT_H_DEFINED 00039 00040 #include "Util/Types.H" // for uint 00041 00042 #include <cstddef> // for size_t 00043 00044 //! A simple font class 00045 /*! This is very impoverished by today's standards... Our font 00046 definitions only support fixed width and consist of the 95 00047 characters (the first one is a space): 00048 00049 \pre 00050 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 00051 \endpre 00052 00053 as created by AppMedia/app-font2c.C from an image of these 00054 characters. See writeText() in Image/DrawOps.H for a function that 00055 uses fonts. */ 00056 class SimpleFont { 00057 public: 00058 //! Constructor 00059 SimpleFont(const uint cw, const uint ch, const unsigned char *cdata); 00060 00061 //! Destructor 00062 ~SimpleFont(); 00063 00064 //! Pseudo-constructor to get a font with fixed width 00065 /*! Supported widths include: 6, 7, 8, 9, 10, 14 and 20. */ 00066 static SimpleFont FIXED(const uint width); 00067 00068 //! Get a standard font with width <= maxwidth 00069 /*! If no font satisfies this criterion, return the smallest 00070 available font */ 00071 static SimpleFont fixedMaxWidth(const uint maxwidth); 00072 00073 //! Get a standard font with height <= maxheight 00074 /*! If no font satisfies this criterion, return the smallest 00075 available font */ 00076 static SimpleFont fixedMaxHeight(const uint maxheight); 00077 00078 //! Return the n'th standard font (n must be less than numStdFonts()) 00079 static SimpleFont stdFont(const size_t n); 00080 00081 //! Return the number of standard fonts 00082 static size_t numStdFonts(); 00083 00084 //! Helper function to get a pointer to a specific char 00085 /*! a Pointer to 'space' is returned if c < 32 or c > 126 */ 00086 const unsigned char* charptr(const int c) const; 00087 00088 //! Width of each char, in pixels 00089 uint w() const { return ww; } 00090 00091 //! Height of each char, in pixels 00092 uint h() const { return hh; } 00093 00094 //! Equality operator; return true if the two fonts share the same data 00095 bool operator==(const SimpleFont& f) const 00096 { return this->ww == f.ww && this->hh == f.hh && this->data == f.data; } 00097 00098 //! Inequality operator 00099 bool operator!=(const SimpleFont& f) const 00100 { return !(*this == f); } 00101 00102 private: 00103 //! Width of each char, in pixels 00104 uint ww; 00105 00106 //! Height of each char, in pixels 00107 uint hh; 00108 00109 //! Pointer to the data 00110 const unsigned char* data; 00111 }; 00112 00113 // ###################################################################### 00114 /* So things look consistent in everyone's emacs... */ 00115 /* Local Variables: */ 00116 /* indent-tabs-mode: nil */ 00117 /* End: */ 00118 00119 #endif