From 01543b7a8d0b7954f830a074a543dedda2b6b7b4 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Thu, 29 Aug 2013 22:08:22 +0000 Subject: [PATCH] Fix issue 535 : PC1 files created by Grafx2 can't be reloaded by Degas Elite git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@2063 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- src/miscfileformats.c | 88 ++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/src/miscfileformats.c b/src/miscfileformats.c index 7cfc6e74..35323abe 100644 --- a/src/miscfileformats.c +++ b/src/miscfileformats.c @@ -1638,58 +1638,62 @@ void PC1_uncompress_packbits(byte * src,byte * dest) void PC1_compress_packbits(byte * src,byte * dest,int source_size,int * dest_size) { - int is; // index dans la source - int id; // index dans la destination - int ir; // index de la répétition - int n; // Taille des séquences - int repet; // "Il y a répétition" - for (is=id=0;is 0) { - // On recherche le 1er endroit où il y a répétition d'au moins 3 valeurs - // identiques + int is = 0; // index dans la source + int id = 0; // index dans la destination + int ir; // index de la répétition + int n; // Taille des séquences + int repet; // "Il y a répétition" - repet=0; - for (ir=is;ir0;n--) - dest[id++]=src[is++]; - } - - // On code la partie sans répétitions - if (repet) - { - // On compte la quantité de fois qu'il faut répéter la valeur - for (ir+=3;ir0;n--) + dest[id++]=src[is++]; + } + + // On code la partie sans répétitions + if (repet) + { + // On compte la quantité de fois qu'il faut répéter la valeur + for (ir+=3;ir<40;ir++) + { + if (src[ir]!=src[is]) + break; + } + n=(ir-is); + dest[id++]=257-n; + dest[id++]=src[is]; + is=ir; } - n=(ir-is); - dest[id++]=257-n; - dest[id++]=src[is]; - is=ir; } + // On renseigne la taille du buffer compressé + *dest_size+=id; + // Move for next 40-byte block + src += 40; + dest += id; + source_size -= 40; } - - // On renseigne la taille du buffer compressé - *dest_size=id; } //// DECODAGE d'une partie d'IMAGE ////