From: Sylvain Bougnoux Date: Wed, 18 Aug 1999 17:31:34 +0000 (+0000) Subject: Added PNM image handler X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a8d9809fc0d3ac6a285bddeb6de44d334e38e011 Added PNM image handler git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3417 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/imagpnm.cpp b/src/common/imagpnm.cpp new file mode 100644 index 0000000000..ffbd4c1bd4 --- /dev/null +++ b/src/common/imagpnm.cpp @@ -0,0 +1,141 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: imagpnm.cpp +// Purpose: wxImage PNM handler +// Author: Sylvain Bougnoux +// RCS-ID: $Id$ +// Copyright: (c) Sylvain Bougnoux +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +/* + We don't put pragma implement in this file because it is already present in + src/common/image.cpp +*/ + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#include "wx/image.h" +#include "wx/log.h" +#include "wx/txtstrm.h" + +#ifdef __WXMSW__ +#include +#endif + +//----------------------------------------------------------------------------- +// wxBMPHandler +//----------------------------------------------------------------------------- + +#if !USE_SHARED_LIBRARIES +IMPLEMENT_DYNAMIC_CLASS(wxPNMHandler,wxImageHandler) +#endif + +#if wxUSE_STREAMS + + //#include // for cout + +void Skip_Comment(wxInputStream &stream) +{ + wxString line; + wxTextInputStream text_stream(stream); + + if (stream.Peek()==_T('#')) + { + text_stream >> line; + Skip_Comment(stream); + } +} + +bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSED(verbose) ) +{ + wxUint32 width, height; + wxUint16 maxval; + wxString line; + char c(0); + + image->Destroy(); + + /* + * Read the PNM header + */ + + wxTextInputStream text_stream(stream); + + Skip_Comment(stream); + if (stream.GetC()==_T('P')) c=stream.GetC(); + + switch (c) + { + case _T('2'): + wxLogError(_T("Loading Grey Ascii PNM image is not yet implemented.")); + return FALSE; + case _T('5'): + wxLogError(_T("Loading Grey Raw PNM image is not yet implemented.")); + return FALSE; + case _T('3'): case _T('6'): break; + default : + wxLogError(_T("Loading PNM image : file not recognized.")); + return FALSE; + } + + text_stream >> line; // for the \n + Skip_Comment(stream); + text_stream >> width >> height ; + Skip_Comment(stream); + text_stream >> maxval; + + //cout << width << " " << height << " " << maxval << endl; + image->Create( width, height ); + unsigned char *ptr = image->GetData(); + if (!ptr) + { + wxLogError( _T("Cannot allocate RAM for RGB data in PNM file.") ); + return FALSE; + } + + if (c=='3') // Ascii RBG + { + wxUint32 value, size=3*width*height; + for (wxUint32 i=0; iSetMask( FALSE ); + + return (stream.LastError()==wxStream_NOERROR || stream.LastError()==wxStream_EOF); +} + +bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUSED(verbose) ) +{ + wxTextOutputStream text_stream(stream); + + //text_stream << "P6" << endl + //<< image->GetWidth() << " " << image->GetHeight() << endl + //<< "255" << endl; + text_stream << "P6\n" << image->GetWidth() << " " << image->GetHeight() << "\n255\n"; + stream.Write(image->GetData(),3*image->GetWidth()*image->GetHeight()); + + return (stream.LastError()==wxStream_NOERROR); +} + +#endif // wxUSE_STREAMS + +