3Fermer5
PolluxLe 12/08/2007 à 23:03
Ymox (./1) :
Je m'intéresse à ce type de compression pour des images noir/blanc, mais malgré ce que j'ai pu lire sur Internet, je crois que je n'ai pas saisi quelques subtilités...
On regroupe donc les suites de plus de 3 bytes identiques, et on code ceci sur 3 bytes : flag|nombre_de_fois|byte_à_reproduire. Mais comment fait-on au décodage si le byte flag apparaît précédé de n'importe quel autre et suivi d'un groupe de deux autres bytes, différents entre eux, et dont le premier est différent du byte flag ?

comme dit Nil il faut que tu aies une séquence commençant par "flag" qui te permette de représenter l'octet flag isolé ; une solution simple serait de prendre tout simplement "flag|1|flag" -- l'avantage c'est que tu n'auras pas à prévoir spécialement ce cas dans le décodeur, c'est juste un RLE comme les autres smile

après tu peux faire qqch de plus fin, par exemple étant donné que "flag|1|<un autre octet que flag>" n'aurait aucun intérêt (prend 3 octets au lieu d'un) tu peux décréter que si la longueur de la séquence RLE vaut 1 alors l'octet à reproduire sera systématiquement flag : ça permet de ne prendre que 2 octets au lieu de 3 quand tu tombes sur un flag happy cela dit c'est pas forcément une bonne idée, parce que ça va rajouter au bas mot une dizaine d'octets dans ton décodeur alors que ça n'apportera au mieux qu'une amélioration de 1/256 = 0.4% du taux de compression... (et sur un fichier "normal" l'amélioration sera nettement plus faible)