[Lazarus] TPicture.LoadFromStream error

Leonardo M. Ramé l.rame at griensu.com
Fri Nov 5 16:43:42 CET 2010


On 2010-11-05 12:39:28 -0300, Leonardo M. Ramé wrote:
> On 2010-11-05 11:46:01 -0300, Leonardo M. Ramé wrote:
> > Hi, I'm loading PGM files to an TImage.Picture using its LoadFromFile or LoadFromStream methods.
> > 
> > This works well on small to medium sized images, but I'm getting an
> > "EReadErrorEReadError" exception if I try to load images of 16mb or more.
> > 
> > Does anyone knows how can I workaround this?.
> > 
> > -- 
> > Leonardo M. Ramé
> > http://leonardorame.blogspot.com
> > 
> > --
> 
> The problem is in fpreadpnm.pp (fpc/packages/fcl-image), in the method:
> 
> procedure TFPReaderPNM.InternalRead(Stream:TStream;Img:TFPCustomImage);
> var
>   Row:Integer;
>   l: Integer;
> begin
>   ReadHeader(Stream);
>   Img.SetSize(FWidth,FHeight);
>   FScanLineSize:=FBitPP*((FWidth+7)shr 3);
>   GetMem(FScanLine,FScanLineSize);
>   try
>     for Row:=0 to img.Height-1 do
>       begin
>       ReadScanLine(Row,Stream);
>       WriteScanLine(Row,Img);
>       end;
>   finally
>     Row := l;
>     FreeMem(FScanLine);
>   end;
> end;  
> 
> The ReadScanLine method uses the FScanLineSize to read from a Stream
> using Stream.ReadBuffer with a size of FScanLineSize, and it seems like
> in my image, in a specific row (4734 to be clear) it has a different line size than the
> expected by FScanLineSize.
> 
> Maybe the formula used to calculate the scan line size is wrong?.
> 
> I can open my image with many viewers like Eye of Gnome, or Gimp without
> problems.
> 

I attached the problematic image here:
http://www.tarjeta-salud.com.ar/downloads/salida.pgm


-- 
Leonardo M. Ramé
http://leonardorame.blogspot.com




More information about the Lazarus mailing list