Hola.
Aquí te envío un ejemplo con los procedimientos ExpandStream y CompressStream que los encontré en una búsqueda que hice por la red (creo que son de un miembro del Team B o algo así, unos expertos en Delphi).
También los procedimientos Descomprime_ZLib y Comprime_ZLib que tienen las llamadas a los procedimientos anteriores. Son de un programa que hice y han sido ligeramente modificados para quitarle lo que puede distraer de tu consulta. Por ello debes tener en cuenta que puede haber algún pequeño error.
Suerte.
Ramón.
procedure ExpandStream(inpStream,outStream: TStream);
var InpBuf,OutBuf: Pointer;
var 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;
procedure CompressStream(inpStream,outStream: TStream);
var InpBuf,OutBuf: Pointer;
var 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;
//-----------------------------------------------------------------------
Procedure Comprime_ZLib ( aaa : String; bbb : String ) ;
VAR
ms1, ms2 : TMemoryStream ;
Begin // aaa : nombre archivo; bbb: Extensión
ms1 := TMemoryStream.Create ;
ms2 := TMemoryStream.Create ;
Try
ms1.LoadFromFile ( aaa + bbb ) ;
CompressStream ( ms1, ms2 ) ; // <<=================
ms2.savetofile (aaa + 'ext' ) ;
Finally
ms2.Free ;
ms1.free ;
end;
end;
Procedure Descomprime_ZLib ( aaa : String; bbb : String ) ;
VAR
ms3, ms4 : TMemoryStream ;
Begin // aaa : nombre archivo; bbb: Extensión
ms3 := TMemoryStream.Create ;
ms4 := TMemoryStream.Create ;
Try
ms3.LoadFromFile ( aaa + bbb ) ;
ExpandStream ( ms3, ms4 ) ;
ms4.SaveToFile ( AAA + 'Ext' ) ;
Finally
ms3.Free ;
ms4.Free ;
end;
end;
