]>
git.saurik.com Git - wxWidgets.git/blob - src/common/imagpnm.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxImage PNM handler
4 // Author: Sylvain Bougnoux
6 // Copyright: (c) Sylvain Bougnoux
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
11 We don't put pragma implement in this file because it is already present in
15 // For compilers that support precompilation, includes "wx.h".
16 #include "wx/wxprec.h"
23 # include "wx/setup.h"
31 #include "wx/txtstrm.h"
33 //-----------------------------------------------------------------------------
35 //-----------------------------------------------------------------------------
37 IMPLEMENT_DYNAMIC_CLASS(wxPNMHandler
,wxImageHandler
)
41 void Skip_Comment(wxInputStream
&stream
)
43 wxTextInputStream
text_stream(stream
);
45 if (stream
.Peek()==wxT('#'))
47 text_stream
.ReadLine();
52 bool wxPNMHandler::LoadFile( wxImage
*image
, wxInputStream
& stream
, bool verbose
, int WXUNUSED(index
) )
54 wxUint32 width
, height
;
64 wxBufferedInputStream
buf_stream(stream
);
65 wxTextInputStream
text_stream(buf_stream
);
67 Skip_Comment(buf_stream
);
68 if (buf_stream
.GetC()==wxT('P')) c
=buf_stream
.GetC();
73 if (verbose
) wxLogError(_("Loading Grey Ascii PNM image is not yet implemented."));
76 if (verbose
) wxLogError(_("Loading Grey Raw PNM image is not yet implemented."));
81 if (verbose
) wxLogError(_("PNM: File format is not recognized."));
85 text_stream
.ReadLine(); // for the \n
86 Skip_Comment(buf_stream
);
87 text_stream
>> width
>> height
;
88 Skip_Comment(buf_stream
);
89 text_stream
>> maxval
;
91 //cout << line << " " << width << " " << height << " " << maxval << endl;
92 image
->Create( width
, height
);
93 unsigned char *ptr
= image
->GetData();
97 wxLogError( _("PNM: Couldn't allocate memory.") );
101 if (c
=='3') // Ascii RBG
103 wxUint32 value
, size
=3*width
*height
;
104 for (wxUint32 i
=0; i
<size
; ++i
)
106 //this is very slow !!!
107 //I wonder how we can make any better ?
108 value
=text_stream
.Read32();
109 *ptr
++=(unsigned char)value
;
111 if (buf_stream
.LastError()!=wxSTREAM_NOERROR
)
113 if (verbose
) wxLogError(_("PNM: File seems truncated."));
118 if (c
=='6') // Raw RGB
119 buf_stream
.Read( ptr
, 3*width
*height
);
121 image
->SetMask( FALSE
);
123 return (buf_stream
.LastError()==wxStream_NOERROR
|| buf_stream
.LastError()==wxStream_EOF
);
126 bool wxPNMHandler::SaveFile( wxImage
*image
, wxOutputStream
& stream
, bool WXUNUSED(verbose
) )
128 wxTextOutputStream
text_stream(stream
);
130 //text_stream << "P6" << endl
131 //<< image->GetWidth() << " " << image->GetHeight() << endl
133 text_stream
<< "P6\n" << image
->GetWidth() << " " << image
->GetHeight() << "\n255\n";
134 stream
.Write(image
->GetData(),3*image
->GetWidth()*image
->GetHeight());
136 return (stream
.LastError()==wxStream_NOERROR
);
139 bool wxPNMHandler::DoCanRead( wxInputStream
& stream
)
141 off_t pos
= stream
.TellI();
143 Skip_Comment(stream
);
145 if ( stream
.GetC() == 'P' )
147 switch (stream
.GetC())
161 #endif // wxUSE_STREAMS