- if (c=='3') // Ascii RBG
- {
- wxUint32 value, size=3*width*height;
- for (wxUint32 i=0; i<size; ++i)
- {
- //this is very slow !!!
- //I wonder how we can make any better ?
- value=text_stream.Read32();
- *ptr++=(unsigned char)value;
-
- if (buf_stream.LastError()!=wxSTREAM_NOERROR)
- {
- wxLogError(_T("Loading PNM image : file seems truncated."));
- return FALSE;
- }
- }
- }
- if (c=='6') // Raw RGB
- buf_stream.Read( ptr, 3*width*height );
-
- image->SetMask( FALSE );
-
- return (buf_stream.LastError()==wxStream_NOERROR || buf_stream.LastError()==wxStream_EOF);
+
+ if (c=='2') // Ascii GREY
+ {
+ wxUint32 value, size=width*height;
+ for (wxUint32 i=0; i<size; ++i)
+ {
+ value=text_stream.Read32();
+ if ( maxval != 255 )
+ value = (255 * value)/maxval;
+ *ptr++=(unsigned char)value; // R
+ *ptr++=(unsigned char)value; // G
+ *ptr++=(unsigned char)value; // B
+ if ( !buf_stream )
+ {
+ if (verbose) wxLogError(_("PNM: File seems truncated."));
+ return false;
+ }
+ }
+ }
+ if (c=='3') // Ascii RBG
+ {
+ wxUint32 value, size=3*width*height;
+ for (wxUint32 i=0; i<size; ++i)
+ {
+ //this is very slow !!!
+ //I wonder how we can make any better ?
+ value=text_stream.Read32();
+ if ( maxval != 255 )
+ value = (255 * value)/maxval;
+ *ptr++=(unsigned char)value;
+
+ if ( !buf_stream )
+ {
+ if (verbose) wxLogError(_("PNM: File seems truncated."));
+ return false;
+ }
+ }
+ }
+ if (c=='5') // Raw GREY
+ {
+ wxUint32 size=width*height;
+ unsigned char value;
+ for (wxUint32 i=0; i<size; ++i)
+ {
+ buf_stream.Read(&value,1);
+ if ( maxval != 255 )
+ value = (255 * value)/maxval;
+ *ptr++=value; // R
+ *ptr++=value; // G
+ *ptr++=value; // B
+ if ( !buf_stream )
+ {
+ if (verbose) wxLogError(_("PNM: File seems truncated."));
+ return false;
+ }
+ }
+ }
+
+ if ( c=='6' ) // Raw RGB
+ {
+ buf_stream.Read(ptr, 3*width*height);
+ if ( maxval != 255 )
+ {
+ for ( unsigned i = 0; i < 3*width*height; i++ )
+ ptr[i] = (255 * ptr[i])/maxval;
+ }
+ }
+
+ image->SetMask( false );
+
+ const wxStreamError err = buf_stream.GetLastError();
+ return err == wxSTREAM_NO_ERROR || err == wxSTREAM_EOF;