+ if (verbose)
+ wxLogError( _("PNM: Couldn't allocate memory.") );
+ return false;
+ }
+
+
+ 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;
+ }