X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0828c0875e1516e4bfc0aa5b0a84195a2ac92cca..6627a4b0497f89221ea9f7848990f8830cf81b7e:/src/common/imagpnm.cpp diff --git a/src/common/imagpnm.cpp b/src/common/imagpnm.cpp index d2b3244965..28bf08eba3 100644 --- a/src/common/imagpnm.cpp +++ b/src/common/imagpnm.cpp @@ -19,14 +19,16 @@ #pragma hdrstop #endif +#ifndef WX_PRECOMP +# include "wx/setup.h" +#endif + +#if wxUSE_PNM + #include "wx/image.h" #include "wx/log.h" #include "wx/txtstrm.h" -#ifdef __WXMSW__ -#include -#endif - //----------------------------------------------------------------------------- // wxBMPHandler //----------------------------------------------------------------------------- @@ -37,8 +39,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxPNMHandler,wxImageHandler) #if wxUSE_STREAMS - //#include // for cout - void Skip_Comment(wxInputStream &stream) { wxString line; @@ -64,10 +64,11 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE * Read the PNM header */ - wxTextInputStream text_stream(stream); + wxBufferedInputStream buf_stream(stream); + wxTextInputStream text_stream(buf_stream); - Skip_Comment(stream); - if (stream.GetC()==_T('P')) c=stream.GetC(); + Skip_Comment(buf_stream); + if (buf_stream.GetC()==_T('P')) c=buf_stream.GetC(); switch (c) { @@ -84,12 +85,12 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE } text_stream >> line; // for the \n - Skip_Comment(stream); + Skip_Comment(buf_stream); text_stream >> width >> height ; - Skip_Comment(stream); + Skip_Comment(buf_stream); text_stream >> maxval; - //cout << width << " " << height << " " << maxval << endl; + //cout << line << " " << width << " " << height << " " << maxval << endl; image->Create( width, height ); unsigned char *ptr = image->GetData(); if (!ptr) @@ -98,7 +99,7 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE return FALSE; } - if (c=='3') // Ascii RBG + 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); + return (buf_stream.LastError()==wxStream_NOERROR || buf_stream.LastError()==wxStream_EOF); } bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUSED(verbose) ) @@ -138,10 +139,23 @@ bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUS bool wxPNMHandler::CanRead( wxInputStream& stream ) { - return FALSE; // VS - temporary - FIXME + off_t pos=stream.TellI(); + + Skip_Comment(stream); + + if (stream.GetC()==_T('P')) + switch (stream.GetC()) + { + case _T('3'): case _T('6'): + stream.SeekI(pos); + return TRUE; + } + + stream.SeekI(pos); + return FALSE; } #endif // wxUSE_STREAMS - +#endif // wxUSE_PNM