00001 /*!@file Image/Pixels.C Basic pixel types version 2.0 */ 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/Image/Pixels.C $ 00035 // $Id: Pixels.C 12598 2010-01-19 03:03:03Z dberg $ 00036 // 00037 00038 #include "Image/Pixels.H" 00039 00040 #include "Util/StringConversions.H" 00041 00042 #include <sstream> 00043 00044 // ###################################################################### 00045 // converters for PixRGB 00046 // ###################################################################### 00047 std::string convertToString(const PixRGB<byte>& val) 00048 { 00049 std::stringstream s; 00050 s<<int(val.red())<<','<<int(val.green())<<','<<int(val.blue()); 00051 return s.str(); 00052 } 00053 00054 // ###################################################################### 00055 void convertFromString(const std::string& str, PixRGB<byte>& val) 00056 { 00057 if (str.length() > 0 && str[0] == '#') { 00058 // #RRGGBB format 00059 std::string str2 = str.substr(1); 00060 std::stringstream s; s<<std::hex<<str2; int rgb; s>>rgb; 00061 val.setRed((rgb & 0xff0000) >> 16); 00062 val.setGreen((rgb & 0xff00) >> 8); 00063 val.setBlue(rgb & 0xff); 00064 } else { 00065 // <byte>,<byte>,<byte> format 00066 std::stringstream s; int r = -1, g = -1, b = -1; 00067 char c; s<<str; s>>r>>c>>g>>c>>b; 00068 if (r == -1 || g == -1 || b == -1) 00069 conversion_error::raise<PixRGB<byte> >(str); 00070 val.set(r, g, b); 00071 } 00072 } 00073 00074 // ###################################################################### 00075 // converters for PixHSV 00076 // ###################################################################### 00077 std::string convertToString(const PixHSV<byte>& val) 00078 { 00079 std::stringstream s; 00080 s<<int(val.H())<<','<<int(val.S())<<','<<int(val.V()); 00081 return s.str(); 00082 } 00083 00084 // ###################################################################### 00085 void convertFromString(const std::string& str, PixHSV<byte>& val) 00086 { 00087 // <byte>,<byte>,<byte> format 00088 std::stringstream ss; int h = -1, s = -1, v = -1; 00089 char c; ss<<str; ss>>h>>c>>s>>c>>v; 00090 if (h == -1 || s == -1 || v == -1) 00091 conversion_error::raise<PixHSV<byte> >(str); 00092 val.setH(h); 00093 val.setS(s); 00094 val.setV(v); 00095 } 00096 00097 // ###################################################################### 00098 // converters for PixDKL 00099 // ###################################################################### 00100 std::string convertToString(const PixDKL<byte>& val) 00101 { 00102 std::stringstream s; 00103 s<<int(val.D())<<','<<int(val.K())<<','<<int(val.L()); 00104 return s.str(); 00105 } 00106 // ###################################################################### 00107 void convertFromString(const std::string& str, PixDKL<byte>& val) 00108 { 00109 // <byte>,<byte>,<byte> format 00110 std::stringstream s; int d = -1, k = -1, l = -1; 00111 char c; s<<str; s>>d>>c>>k>>c>>l; 00112 if (d == -1 || k == -1 || l == -1) 00113 conversion_error::raise<PixDKL<byte> >(str); 00114 val.setD(d); 00115 val.setK(k); 00116 val.setL(l); 00117 } 00118 00119 00120 // ###################################################################### 00121 /* So things look consistent in everyone's emacs... */ 00122 /* Local Variables: */ 00123 /* indent-tabs-mode: nil */ 00124 /* End: */