IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Compression d'un Stream.


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut Compression d'un Stream.
    Bonjour à tous,

    Est-ce que quelqu'un peut m'aider à transformer ces 2 procedures de compression de stream afin que la Stream en entrée soit celle en sortie et non pas une différente. Moi j'ai du mal à le faire car pas assez fort.

    D'avance merci pour vos aides.
    Bruno

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    procedure CompressStream(inpStream, outStream: TStream);
    var
      InpBuf, OutBuf: Pointer;
      InpBytes, OutBytes: Integer;
    begin
      InpBuf := nil;
      OutBuf := nil;
      try
        GetMem(InpBuf, inpStream.Size);
        inpStream.Position := 0;
        InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
        CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
        outStream.Write(OutBuf^, OutBytes);
      finally
        if InpBuf <> nil then FreeMem(InpBuf);
        if OutBuf <> nil then FreeMem(OutBuf);
      end;
    end;
     
     
    { Decompress a stream }
    procedure DecompressStream(inpStream, outStream: TStream);
    var
      InpBuf, OutBuf: Pointer;
      OutBytes, sz: Integer;
    begin
      InpBuf := nil;
      OutBuf := nil;
      sz     := inpStream.Size - inpStream.Position;
      if sz > 0 then 
        try
          GetMem(InpBuf, sz);
          inpStream.Read(InpBuf^, sz);
          DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
          outStream.Write(OutBuf^, OutBytes);
        finally
          if InpBuf <> nil then FreeMem(InpBuf);
          if OutBuf <> nil then FreeMem(OutBuf);
        end;
      outStream.Position := 0;
    end;

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Par défaut
    Si tu veux recopier dans le même Stream, c'est dangereux car tu risques d'écraser des données que tu vas lire. Le plus propre serait de faire une procédure qui recopie A LA FIN des procédures ton Stream de sortie dans ton Stream d'entrée...Attention à l'ajustement de la taille du buffer surtout dans le cas de la compression vers la décompression!! Et j'ai dejà vu des "compressions" qui était plus grosses qu'avant compression.
    C'est une idée un peu étrange ? et tu vraiment sur?

Discussions similaires

  1. Compresser un stream avec ZipOutPutStream
    Par Heavy Metal Hero dans le forum Android
    Réponses: 6
    Dernier message: 11/12/2013, 14h57
  2. zlib / stream / niveau compression
    Par Magohamoths dans le forum C#
    Réponses: 2
    Dernier message: 22/10/2012, 16h17
  3. Streaming, compression vidéo
    Par bum dans le forum Flash
    Réponses: 3
    Dernier message: 23/05/2007, 16h57
  4. Comment compresser un stream ?
    Par lafaryan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/01/2005, 20h05
  5. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo