Compression rle [dev-c++]

Contenu du snippet

Programme de compression RLE(c'est sur les fichiers bitmap qu'il marche le mieux)
à executer sous dos :

pour compresser :
c:\>rle fichier_source fichier_destination c

pour decompresser :
c:\>rle fichier_source fichier_destination d

Source / Exemple :


/*
Name : RLE
Author : Dauzat Lilian
Description : Compression / decompression suivant l'algorithme RLE
Date : 01/01/02
Copyright : Dauzat Lilian
Last update : 06/01/02
Email : obasileus@ifrance.com

  • /
#include <stdio.h> FILE *entre,*sortie; unsigned char codeRepet=255,nbreRepet=1; unsigned char AncCaract,caract,codeARepeter; void compress(void); void dcompress(void); int main(int argc, char *argv[]) { char option; option = *argv[3]; entre = fopen(argv[1],"rb"); sortie = fopen(argv[2],"wb"); if (option == 'c') compress(); if (option == 'd') dcompress(); fclose(entre); fclose(sortie); return 0; } void compress(void) { fread(&AncCaract,sizeof(char),1,entre); while (!feof(entre)) { fread(&caract,sizeof(char),1,entre); if (caract==AncCaract) { if (nbreRepet==253) { fwrite(&codeRepet,sizeof(char),1,sortie); fwrite(&nbreRepet,sizeof(char),1,sortie); fwrite(&AncCaract,sizeof(char),1,sortie); nbreRepet = 1; } else nbreRepet++; } else { if (nbreRepet>3) { fwrite(&codeRepet,sizeof(char),1,sortie); fwrite(&nbreRepet,sizeof(char),1,sortie); fwrite(&AncCaract,sizeof(char),1,sortie); } else { for (short i=0 ; i!=nbreRepet ; i++) { fwrite(&AncCaract,sizeof(char),1,sortie); } } nbreRepet = 1; AncCaract = caract; } } printf("Compression acheve"); } void dcompress() { while (!feof(entre)) { fread(&caract,sizeof(char),1,entre); if (caract == codeRepet) { fread(&nbreRepet,sizeof(char),1,entre); fread(&codeARepeter,sizeof(char),1,entre); for (short i=0 ; i != nbreRepet ; i++) { fwrite(&codeARepeter,sizeof(char),1,sortie); } } else { fwrite(&caract,sizeof(char),1,sortie); } } printf("Decompression acheve"); }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.