COMPRESSION LZW

soporifik27 Messages postés 7 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 janvier 2004 - 6 janv. 2004 à 00:24
heo3637 Messages postés 1 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 23 avril 2012 - 23 avril 2012 à 22:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18640-compression-lzw

heo3637 Messages postés 1 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 23 avril 2012
23 avril 2012 à 22:50
Excellent travail, merci beaucoup!!!
cs_zalson Messages postés 4 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 12 mai 2007
15 mai 2007 à 12:04
Salut je suis très interessé par votre code.Pouvez vous me donner un bref commentaire un son fonctionnement et comment est cree le dictionnare?
Quels types de fichier il compresse? puiseque je dois presenter un project pour la compression et decompression d'un fichier de texte.
yolas22 Messages postés 1 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 19 juillet 2006
19 juil. 2006 à 15:02
Et bien je cherchais des explications sur le lzw compression et decompression, la lecture de ce code et des commentaires m'en a appris plus que certaines documentations.
Chapeau, super propre ton code ( 2 ans aprés je relance les compliments).
+ yolas22.
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 déc. 2005 à 09:16
J'ai pas utilisé la stl pour les raisons suivantes :
- ce code est en C.
- j'utilise jamais la stl en C++.

Par contre ma façon de stocker le dico est trop compliqué. Il y a en fait beaucoup plus simple.
Il suffit d'avoir un buffer contenant les x derniers octets et de sauvegardé une liste d'indice pour remonter les mots (utilisés par gzip).
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
1 déc. 2005 à 19:28
apres une petite lecture du code, j'aurai quand même une question ... le dictionnaire que tu utilises est constitué a partir du bon vieux malloc.... j'aimerai savoir pourquoi ne pas avoir utiliser l'objet map de la librairie stl ... ca aurait eviter pas mal de ligne pour la gestion du dictionnaire et serait bcp plus simple à gerer au niveau des ressources ... est ce un choix delibéré? si oui peux tu m'expliquer stp je patauge encore dans cette partie là .... si non voici une doc basique sur son fonctionnement:
http://support.microsoft.com/default.aspx?scid=kb;fr;157159#appliesto


Merci d'avance

hebus16
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 nov. 2005 à 09:01
POur le LZW, tout le code est nécessaire.
Des compressions plus simples existent :
RLE (Run Length Encoding)
Huffman.
Et plus complique :
ZIP, RAR, JPEG (image), MP3 (musique)...

Pour RLE et huffman, des sources et doc existent un peu partout sur ce site et le net.

Dans tous les cas, il faudra une fonction permettant d'écrire dans un fichier bit par bit.
A_balabola Messages postés 1 Date d'inscription mercredi 19 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 12:40
Bonjour je dois faire un programme en cpp sur la compression et la decompression des fichiers et images, donc j'ai vu ce programme qui m'a l'air tres interressent et je voudrais savoir s'il y a une manière plus simple de faire ce pgm parce que j'suis pas tres douée en cpp et est ce que tout les sous pgm sont necessaire pour ce projet. Aidez moi svp, merci beaucoup.
hebus16 Messages postés 80 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 2 octobre 2009 1
10 oct. 2005 à 21:48
Excellent travail aussi bien sur ce code clair que sur les explications fournies par les docs joints .... franchement bravo, rare de voir des développeurs aussi soigneux !!!
mrbozzo Messages postés 11 Date d'inscription mercredi 29 octobre 2003 Statut Membre Dernière intervention 4 avril 2007
7 sept. 2004 à 22:33
ouah, quel code...
Dans ma tête c'était beaucoup plus simple mais plus gourmand en mémoire
merci d'avoir répondu à mon message...
brenntengel Messages postés 49 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 6 mai 2006
17 juil. 2004 à 15:51
Merci j'ai chercher hier qlq page qui parle sur
ce sujet et j'ai pas trouver de bonne pages
et j'ai vu la pages dans le ZIP
et elle me semble tres claires ....(Merci !!!)
je vais essayer de traviller dessous et je te montrerai mon travaille des que possibles

allez A+ .
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
16 juil. 2004 à 21:16
la compression lzw ne marche bien que sur des fichiers non compressé; or les jpg le sont déjà et on peut guère faire mieux ave LZW.
pour faire ce prog je me suis basé sur la page web incluse dans le zip et en tappant lzw sur un moteur de recherche on trouve pas mal de doc la dessus
brenntengel Messages postés 49 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 6 mai 2006
16 juil. 2004 à 18:01
Vraiment Chapeau pour ton travail j'ai vu bq d'autre
codes c'est Exellent .
Mais j'ai comme meme une question
j'ai essayer de compresser un fichier jpg mais
sa taille a augmenter de qlq KO pkoi ??.

Bon je voulais aussi si tu peut m'indiquer les
tutorial ou tu as appris toutes ces choses ;-)

Merci enocre et BRAVO !!!!!
coq73 Messages postés 5 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 18 novembre 2004
25 juin 2004 à 11:02
merci beaucoup.je vais essayer de l'installer et voir si ça fonctionne si j'ai des problèmes je te le fais savoir.
buona giornata carissimo
JEAN PIERRE
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 juin 2004 à 23:40
j'ai tester le téléchargement, ça marche sinon voici "lzw.h"

si tu as tjrs des pb, donne e-mail par message perso et je t'enverrais le zip.


/******************************************************************************|* LZW.h : entête pour les fonctions de compression / décompression avec *|
|* l'algorithme LZW. *|
\******************************************************************************/

#ifndef _LZ_H_INCLUDED
#define _LZ_H_INCLUDED


/*============================================================================*|* Définition de types de base. *|
\*============================================================================*/
typedef unsigned char BYTE; /* donnée de 1 octet (8 bits) */
typedef unsigned short WORD; /* donnée de 2 octets (16 bits) */
typedef unsigned long DWORD; /* donnée de 4 octets (32 bits) */


/*============================================================================*|* Définition de constantes. *|
\*============================================================================*/

/* codes spéciaux */
#define LZW_EOF 256 /* fin de fichier */
#define LZW_BIT_PLUS 257 /* un bit de plus à lire */
#define LZW_NEW_DIC 258 /* nouveau dictionnaire */
#define LZW_BEGIN_DIC 259 /* premier mot du dictionnaire */

/* paramètres de l'algorithme */
#define MIN_BITS 9 /* nombre min de bits */
#define MAX_BITS 12 /* nombre max de bits */
#define MAX_DICO_LENGTH 4096 /* taille max du dictionnaire */
#define MAX_BUFFER_LENGTH 4096 /* taille max des buffers */

/* taille des buffers pour les lectures / écritures */
#define FILE_BUFFER_LENGTH 32768

/* modes de fonctionnement */
#define COMPRESS 1 /* mode compression */
#define UNCOMPRESS 2 /* mode décompression */

/* définition TRUE */
#ifndef TRUE
#define TRUE 1
#endif

/* définition FALSE */
#ifndef FALSE
#define FALSE 0
#endif


/*============================================================================*|* Codes de retour des fonctions. *|
\*============================================================================*/
#define LZW_SUCCESS 0 /* succès */
#define LZW_ERROR_INFILE -1 /* erreur sur le fichier d'entrée */
#define LZW_ERROR_OUTFILE -2 /* erreur sur le fichier de sortie */
#define LZW_ERROR_NAMES -3 /* noms de fichiers identiques */
#define LZW_ERROR_MEM -4 /* erreur de mémoire */
#define LZW_ERROR_READ -5 /* erreur de lecture */
#define LZW_ERROR_WRITE -6 /* erreur d'écriture */
#define LZW_ERROR_EOF -7 /* fin de fichier non trouvé
(décompression) */



/*============================================================================*|* Structure décrivant un buffer. *|
\*============================================================================*/
typedef struct tagTBuffer
{
BYTE* m_pData; /* tableau des données */
WORD m_Size; /* taille du tableau */
WORD m_NbData; /* nombres de données dans le tableau */
}TBuffer;


/*============================================================================*|* Déclaration des fonctions globales. *|
\*============================================================================*/
extern int LZW (char* lpszInFile, char* lpszOutFile);
extern int UnLZW (char* lpszInFile, char* lpszOutFile);
extern int GetJobTotal ();
extern int GetJobCurrent ();
extern int GetInSize ();
extern int GetOutSize ();

#endif /* _LZ_H_INCLUDED */
coq73 Messages postés 5 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 18 novembre 2004
24 juin 2004 à 16:28
bonjour
s'il te plait je n'arrive pas à telecharger le zip attaché car j'aimerai avoir la librairie " LZW.H"..comment y arriver.
jean pierre depuis l'italie
Utilisateur anonyme
21 janv. 2004 à 11:06
Oui, merci beaucoup;
votre apport pour ma base d'algorithmes enrichit ma perception de votre travail.
soporifik27 Messages postés 7 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 janvier 2004
6 janv. 2004 à 00:24
alors la j'ai qu'une chose a faire !!!
MERCI MERCI MERCI !!!!
je m'incline pour te remercier lol

ça fait pas mal de jours que je cherche un code qui marche pour compresser avec cet algorithme pour comprendre la façon dont il fonctionne et tu me sauves !!!

merci grâce a toi on aura peut être une bonne note ! lol
Rejoignez-nous