X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0828c0875e1516e4bfc0aa5b0a84195a2ac92cca..7b9da2077d0975db6c965a85c91d5aca671ab5e3:/src/common/imagpnm.cpp diff --git a/src/common/imagpnm.cpp b/src/common/imagpnm.cpp index d2b3244965..c2ed7bf13c 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,16 +39,13 @@ IMPLEMENT_DYNAMIC_CLASS(wxPNMHandler,wxImageHandler) #if wxUSE_STREAMS - //#include // for cout - void Skip_Comment(wxInputStream &stream) { - wxString line; wxTextInputStream text_stream(stream); - if (stream.Peek()==_T('#')) + if (stream.Peek()==wxT('#')) { - text_stream >> line; + text_stream.ReadLine(); Skip_Comment(stream); } } @@ -55,80 +54,80 @@ bool wxPNMHandler::LoadFile( wxImage *image, wxInputStream& stream, bool WXUNUSE { wxUint32 width, height; wxUint16 maxval; - wxString line; char c(0); - + image->Destroy(); /* * 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()==wxT('P')) c=buf_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; + case wxT('2'): + wxLogError(wxT("Loading Grey Ascii PNM image is not yet implemented.")); + return FALSE; + case wxT('5'): + wxLogError(wxT("Loading Grey Raw PNM image is not yet implemented.")); + return FALSE; + case wxT('3'): case wxT('6'): break; + default : + wxLogError(wxT("Loading PNM image : file not recognized.")); + return FALSE; } - text_stream >> line; // for the \n - Skip_Comment(stream); + text_stream.ReadLine(); // for the \n + 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) { - wxLogError( _T("Cannot allocate RAM for RGB data in PNM file.") ); - return FALSE; + wxLogError( wxT("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); + return (buf_stream.LastError()==wxStream_NOERROR || buf_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 + + //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()); @@ -136,12 +135,28 @@ bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUS return (stream.LastError()==wxStream_NOERROR); } -bool wxPNMHandler::CanRead( wxInputStream& stream ) +bool wxPNMHandler::DoCanRead( wxInputStream& stream ) { - return FALSE; // VS - temporary - FIXME + off_t pos = stream.TellI(); + + Skip_Comment(stream); + + if ( stream.GetC() == 'P' ) + { + switch (stream.GetC()) + { + case '3': + case '6': + stream.SeekI(pos); + return TRUE; + } + } + + stream.SeekI(pos); + return FALSE; } #endif // wxUSE_STREAMS - +#endif // wxUSE_PNM