I think that I found some mistakes in the code that reads and writes
RLE-compressed TGA files (in tga.c). Gimp can generate a RLE-compressed 
file containing RLE packets, which go through the end of a scan line
(that is encode pixels from more that one pixel line), which is 
prohibited by the standard.

I tested it by generating a 5x5 grayscale image with the following 

(O = white, X = black)

Gimp compressed the white pixels with one packet containing the first pixel,
3 packets containing the last two pixels on i-th line a the first
pixel on (i-1)-th line (i=1,2,3), and one packet containing the last 7 pixels.
I think that the reason is in setting the width variable in save_image():
here the width should be equal to the width of the image.

Another problem is in the rle_read() function: variables repeat and direct
are not correctly initialized on every call of rle_read(), as they are
static. This is, by a chance (IMO) the reason, why Gimp can read its
own RLE-compressed files: these two variables keep their values from the
last call.

I apologize that I can't try to fix the errors myself at the moment, as I'm
late with some urgent SW project.

Best regards,


Petr Mejzlik
Dept. of Information Technology, Faculty of Informatics      
Masaryk University                            Internet: [EMAIL PROTECTED]
Botanicka 68a                                 FAX : +42-05-4121 2568
CZ-602 00 Brno, Czech Republic                Tel.: +42-05-4151 2338
Gimp-developer mailing list

Reply via email to