Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1674 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Compression RLE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compression RLE

n°404796
kabuto
Posté le 22-05-2003 à 17:18:30  profilanswer
 

Alors voila je vous donne mon code pour cetet compression pour que puissiez m aider a comrpendre ce qui va pas , car cela marche pour plein de fichier image ( capture d ecran , .. ) mais pas pour certains fixhiers ( type dessin de merde fait sous paint ) SVP aidez moi  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. FILE *source,*sortie;
  4. unsigned char codeRepet='@';// on definit le caractere @ comme caractere de repetition  
  5. long int nbreRepet=1;
  6. char Caractprec,caract,codeARepeter;
  7. void compress(void);
  8. void dcompress(void);
  9. int main(int argc, char *argv[])//passage d'arguments pour l instant pour tester
  10. {                                             
  11.      char option;
  12.      option = *argv[3];
  13.    
  14.      source = fopen(argv[1],"rb" );
  15.      sortie = fopen(argv[2],"wb" );
  16.    
  17.      if (option == 'c') compress();
  18.      if (option == 'd') dcompress();           
  19.            
  20.      fclose(source);
  21.      fclose(sortie);
  22.        
  23.      return 0;
  24. }
  25. void compress(void)
  26. {
  27. fread(&Caractprec,sizeof(char),1,source);
  28. while (!feof(source))     
  29.          fread(&caract,sizeof(char),1,source);
  30.          if (Caractprec == codeRepet)//si le caractere recupere est le de repetition on le code comme
  31.   {        //si c etait une repetition pour evite d avoir des problemes lors de la decompression
  32.   nbreRepet=1;
  33.   fwrite(&codeRepet,sizeof(char),1,sortie);
  34.   fwrite(&nbreRepet,sizeof(long int),1,sortie);
  35.   fwrite(&codeRepet,sizeof(char),1,sortie);
  36.   Caractprec = caract;
  37.   }
  38.   else
  39.   {
  40.   if (caract==Caractprec)
  41.   {
  42.    nbreRepet++;
  43.    Caractprec=caract;
  44.   }       
  45.   else
  46.   {
  47.    if (nbreRepet>3) //si compression avantageuse on la fait  
  48.    {
  49.     fwrite(&codeRepet,sizeof(char),1,sortie);
  50.     fwrite(&nbreRepet,sizeof(long int),1,sortie);
  51.     fwrite(&Caractprec,sizeof(char),1,sortie);
  52.                 }           
  53.    else //sinon non  
  54.    {
  55.     if (Caractprec != codeRepet)
  56.     {
  57.      for (long int i=0 ; i!=nbreRepet ; i++)
  58.      {
  59.       fwrite(&Caractprec,sizeof(char),1,sortie);
  60.      }
  61.     }
  62.    }
  63.    nbreRepet = 1;
  64.    Caractprec = caract;
  65.   }
  66.   }
  67. }
  68. printf("Compression acheve" );
  69. }
  70. void dcompress()
  71. while (!feof(source))
  72. {
  73.          fread(&caract,sizeof(char),1,source);             
  74.        
  75.          if (caract == codeRepet)//si caractere compresse  
  76.          {
  77.   fread(&nbreRepet,sizeof(long int),1,source);
  78.   fread(&codeARepeter,sizeof(char),1,source);
  79.   for (long int i=0 ; i != nbreRepet ; i++)//on le recopie le nombre de fois necessaire
  80.   {
  81.    fwrite(&codeARepeter,sizeof(char),1,sortie);
  82.   }
  83.          }
  84.          else //cas d'un caractere non compresse  
  85.          {
  86.   fwrite(&caract,sizeof(char),1,sortie);//on le recopie simplement  
  87.          }
  88. }
  89. printf("Decompression acheve" );
  90. }

mood
Publicité
Posté le 22-05-2003 à 17:18:30  profilanswer
 

n°404804
chrisbk
-
Posté le 22-05-2003 à 17:21:00  profilanswer
 

les autres je sais pas, mais moi j'aide pas qqun qui me decrit pas le pb, symptome et tout ca

n°404818
Taz
bisounours-codeur
Posté le 22-05-2003 à 17:34:35  profilanswer
 

ça c'est pas bon
 
while (!feof(source))
    {
               fread(&caract,sizeof(char),1,source);      
 
 
lis la doc de ces deux fonctions et vois qu'il faut controler le retoure de fread et ne pas utiliser feof
 
 
 
question: il se passe quoi si mon ficheir contient un'@' ?

n°404824
kabuto
Posté le 22-05-2003 à 17:39:50  profilanswer
 

si le fichier contient un @ , des que le caractere @ est lu on le traite comme si on devait compresser ce caractere c est a dire cette partie du code  

Code :
  1. if (Caractprec == codeRepet)//si le caractere recupere est le de repetition on le code comme  
  2.   {        //si c etait une repetition pour evite d avoir des problemes lors de la decompression  
  3.   nbreRepet=1;
  4.   fwrite(&codeRepet,sizeof(char),1,sortie);
  5.   fwrite(&nbreRepet,sizeof(long int),1,sortie);
  6.   fwrite(&codeRepet,sizeof(char),1,sortie);
  7.   Caractprec = caract;
  8.   }


 
voila sinon pour le feof c est ce qu on m a enseigne a l'iut donc je pense que vu que c est pour mes projets tuteures , c est bon .

n°404848
kabuto
Posté le 22-05-2003 à 17:54:05  profilanswer
 

[:rv82]

n°404864
skeye
Posté le 22-05-2003 à 18:06:08  profilanswer
 

Ca sert à quoi de upper? On va pas sortir la boule de cristal pour savoir ce qui ne marche pas... :sarcastic:

n°404916
Taz
bisounours-codeur
Posté le 22-05-2003 à 18:21:31  profilanswer
 

feof est pas, tes profs se vautre comem des otaries bourées
 
mes données à compresser, c'est ça "d@wa"... ça donen quoi quand tu compresses?

n°405013
kabuto
Posté le 22-05-2003 à 20:39:23  profilanswer
 

d@wa ca donnera d@1@wa , mais la c est pas du tout representatif car il n y a pas de repetition dans ta chaine. pour des chaines comme la tienne on utilise la compression de Huffman. Mais je crosi avoir rtouver la reponse en fait ca merde que lorsque c est un BMP fait avec du remplissage sous paint , sinon fait avec photoshop ca passe nickel.

n°405348
skeye
Posté le 23-05-2003 à 07:05:55  profilanswer
 

Kabuto a écrit :

d@wa ca donnera d@1@wa , mais la c est pas du tout representatif car il n y a pas de repetition dans ta chaine. pour des chaines comme la tienne on utilise la compression de Huffman. Mais je crosi avoir rtouver la reponse en fait ca merde que lorsque c est un BMP fait avec du remplissage sous paint , sinon fait avec photoshop ca passe nickel.  


Super...à mon avis ca va vachement te permettre de corriger le bug du programme ca... :sarcastic:

n°405402
ToxicAveng​er
Posté le 23-05-2003 à 08:59:08  profilanswer
 

++Taz t'a donné la réponse : le feof ne fonctionne pas comme tu le crois. :ange:

mood
Publicité
Posté le 23-05-2003 à 08:59:08  profilanswer
 

n°405535
kabuto
Posté le 23-05-2003 à 10:10:31  profilanswer
 

non mais le bug ne viens reelement que des fichiers crees sous paint , pour tout autre fichier image cela marche nickel ce qui montre bien que le code fonctionne.

n°405539
skeye
Posté le 23-05-2003 à 10:15:05  profilanswer
 

Kabuto a écrit :

non mais le bug ne viens reelement que des fichiers crees sous paint , pour tout autre fichier image cela marche nickel ce qui montre bien que le code fonctionne.


 :lol:  
Donc c'est pas ton code qui est buggé de pas marcher avec les fichiers créés par paint, ce sont tous les logiciels existants qui marchent avec ces mêmes fichiers qui devraient pas, c'est ça? :sarcastic:  

n°405617
ToxicAveng​er
Posté le 23-05-2003 à 10:58:21  profilanswer
 

skeye a écrit :


 :lol:  
Donc c'est pas ton code qui est buggé de pas marcher avec les fichiers créés par paint, ce sont tous les logiciels existants qui marchent avec ces mêmes fichiers qui devraient pas, c'est ça? :sarcastic:  


 
mais c'est bien sur ! [:yaisse2]

n°405844
kabuto
Posté le 23-05-2003 à 13:11:00  profilanswer
 

Cela en marche pas qu avec les fichiers crees sous paint et utilisant du remplissage car paint doit utiliser une compression quelqconque pour le remplissage.

n°405849
Konar
Posté le 23-05-2003 à 13:14:02  profilanswer
 

Kabuto a écrit :

Cela en marche pas qu avec les fichiers crees sous paint et utilisant du remplissage car paint doit utiliser une compression quelqconque pour le remplissage.  


 
t'as des messages d'erreurs spécifiques ? des fonctions ki retournent pas ce qu'il faudrait ? un segfolt ? etc... ou t'as juste une MsgBox ki te dit "Houla ! ce fichier vient de Paint, j'en veux pas."

n°405909
skeye
Posté le 23-05-2003 à 13:36:14  profilanswer
 

Kabuto a écrit :

Cela en marche pas qu avec les fichiers crees sous paint et utilisant du remplissage car paint doit utiliser une compression quelqconque pour le remplissage.  


Quoi qu'il arrive ca te donnera tjrs des fichiers respectant le standard utilisé,et les autres applis savent les lire, donc c'est chez toi qu'il y  un bug, c'est tout!
Donne nous plutot l'erreur que tu as au lieu de batailler comme ca!!

n°408363
kabuto
Posté le 26-05-2003 à 19:49:09  profilanswer
 

ben ca me fait pas d erreurs justement , c est juste que uniquement dans le cas cite , eh ben le fichier une fois reconstitue ne fait plus la taille originale et ne peut donc pas etre ouvert , testez vous verrez .

n°408369
skeye
Posté le 26-05-2003 à 19:55:16  profilanswer
 

Kabuto a écrit :

ben ca me fait pas d erreurs justement , c est juste que uniquement dans le cas cite , eh ben le fichier une fois reconstitue ne fait plus la taille originale et ne peut donc pas etre ouvert , testez vous verrez .  


Dans ce cas ton soft est buggé soit dans un sens soit dans l'autre hein...c pas magique!

n°408509
kabuto
Posté le 26-05-2003 à 22:05:40  profilanswer
 

Ben ca je veux bien l admettre mais dans ce cas la , aidez moi a trouvez d'où cela vient . Merci  :love:

n°408643
Konar
Posté le 26-05-2003 à 23:54:14  profilanswer
 

Kabuto a écrit :

Ben ca je veux bien l admettre mais dans ce cas la , aidez moi a trouvez d'où cela vient . Merci  :love:  


 
a permier vue : fichier dtc.cpp, ligne 616, il te manque un const dans ton for.

n°408776
skeye
Posté le 27-05-2003 à 09:14:50  profilanswer
 

Kabuto a écrit :

Ben ca je veux bien l admettre mais dans ce cas la , aidez moi a trouvez d'où cela vient . Merci  :love:  


Le fichier généré est plus gros? plus petit?
Tu as essayé d'ouvrir le fichier original et le fichier généré dans un éditeur de texte? Et le fichier intermédiaire?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Compression RLE

 

Sujets relatifs
Compression Camera-IEEE1394 -> Mpeg ou autre[JS] algo de compression, zip ou autre
Chercehe librairie de compression d'image lossless[Reseaux de neurones]Cherche infos sur: compression image, reco typo,
Composant de compression/décompression de fichiers zipcompression gzip des pages (please help me!)
compression zipCompression de programmes (upc, etc...)
Compression avec zlib (ou libz au choix)Placer un fichier .exe dans son executable ! et la compression???
Plus de sujets relatifs à : Compression RLE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR