From f2872bfd97f9297b1446f1fd6595a32dc509f301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= Date: Wed, 29 Apr 2009 04:10:10 +0200 Subject: Adding cpixmap.cpp, cpixmap.h and test fieles --- ue2/imgsynth2/cpixmap.cpp | 163 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 ue2/imgsynth2/cpixmap.cpp (limited to 'ue2/imgsynth2/cpixmap.cpp') diff --git a/ue2/imgsynth2/cpixmap.cpp b/ue2/imgsynth2/cpixmap.cpp new file mode 100644 index 0000000..ff5a83c --- /dev/null +++ b/ue2/imgsynth2/cpixmap.cpp @@ -0,0 +1,163 @@ +/** + * @module CPixMap + * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348) + * @brief Implementation of CFile handling Windows Bitmaps. + * @date 27.04.2009 + */ + +#include +#include + +#ifdef DEBUG +# include +#endif +# include +# include +#include "cpixmap.h" +#include "cpixelformat_indexed8.h" + +using namespace std; + +CPixMap::CPixMap() +{ + m_types.insert("XPM"); + + /* add our handlers */ + m_handlers.insert(new CPixelFormat_Indexed8(this)); + +} + + + +/*----------------------------------------------------------------------------*/ + +void CPixMap::read(std::ifstream& in) +{ + + string str; + + /* parse the values section */ + getline( in, str, '"'); + getline( in, str, '"'); + stringstream istr (str ); + + istr >> m_fileheader.xpmWidth ; + istr >> m_fileheader.xpmHeight ; + istr >> m_fileheader.nColor ; + istr >> m_fileheader.nChar ; + + /* if there are optional values */ + if (in.good()) + { + istr >> m_fileheader.xHotspot; + istr >> m_fileheader.yHotspot; + } + else + { + m_fileheader.xHotspot = NULL; + m_fileheader.yHotspot = NULL; + } + + + /* parse the colors section */ + getline( in, str, '"'); + for (unsigned int i = 0; i < m_fileheader.nColor; i++ ) + { + getline( in, str, '"' ); + stringstream istr2 (str ); + char character; + string mode, colors; + + istr2 >> character; + istr2 >> mode; + istr2 >> colors; + m_fileheader.xpmColors[character][mode] = colors; + + getline( in, str, '"' ); + } +/* colors.replace(0,1,"0x"); + colors.insert(4, " 0x"); + colors.insert(9," 0x"); + + stringstream istr3 (colors, stringstream::out|stringstream::in ); + istr3 >>hex>> r; + istr3 >>hex>> g; + istr3 >>hex>> b; + //?????????????ß + cout<(r); + m_fileheader.xpmColors[c1]['g'] = static_cast(g); + m_fileheader.xpmColors[c1]['b'] = static_cast(b);*/ + + + + /* read pixel data using separate class */ + if (getPixelDataSize() > 0) + { + if (m_pixeldata != NULL) + delete[] m_pixeldata; + m_pixeldata = new uint8_t[getPixelDataSize()]; + + /* parse the pixel data */ + for (unsigned int y = 0; y < getHeight(); y++ ) + { + for (unsigned int x = 0; x < getWidth(); x++ ) + m_pixeldata[y * getWidth() + x] = static_cast(in.get()); + + getline( in, str); + if ( y != ( getHeight() - 1 )) + in.get(); + + } + } + + /* debug*/ + CPixMap::dump (cout); + + +} + +/*----------------------------------------------------------------------------*/ + +void CPixMap::write(std::ofstream& out) +{ + dump(out); +} + + +/*----------------------------------------------------------------------------*/ + +#ifdef DEBUG +void CPixMap::dump(std::ostream& out) +{ + + /* values*/ + out + << "XPM Header:" << endl + << ", xpmWidth=" << m_fileheader.xpmWidth<< endl + << ", xpmHeight=" << m_fileheader.xpmHeight<< endl + << ", nColor=" << m_fileheader.nColor<< endl + << ", nChar=" << m_fileheader.nChar<< endl + << endl; + + /* colors*/ + map >::iterator it1; + map::iterator it2; + for ( it1=m_fileheader.xpmColors.begin() ; it1 != m_fileheader.xpmColors.end(); it1++ ) + { + out << (*it1).first ; + for ( it2=(*it1).second.begin() ; it2 != (*it1).second.end(); it2++ ) + out << (*it2).first <<" > "<< (*it2).second<