سلام
ابتدا Zlib رو در بخش Uses فرم اضافه كنيد . بعد از اون با استفاده از Function زير ميتونيد يك Stream ورودي رو فشرده كنيد :
Function Zip(Source:TMemoryStream):TMemoryStream;
var
ComprStream:TCompressionStream;
begin
Result:=TMemoryStream.Create;
comprStream:=TCompressionStream.Create(clFastest,R esult);
try
comprStream.CopyFrom(Source,Source.Size);
finally
comprStream.Free;
end;
end;
به كمك تابع زير هم يك Stream فشرده شده رو باز ميكنيد ( البته فقط Stream هايي كه با تابع Zip فشرده كرديد .)
Function UnZip(Source:TMemoryStream):TMemoryStream;
var
DeComprStream:TDecompressionStream;
Buffer: Array[0..4000] of char;
BufLen: Integer;
begin
Result:=TMemoryStream.Create;
DeComprStream:=TDecompressionStream.Create(Source) ;
try
BufLen:=DeComprStream.Read(Buffer,SizeOf(Buffer));
while BufLen>0 do
begin
Result.Write(Buffer,BufLen);
BufLen:=DeComprStream.Read(Buffer,SizeOf(Buffer));
end;
Result.Seek(0,soFromBeginning);
finally
DeComprStream.Free;
end;
end;
مثال :
var
Tmp:TMemoryStream;
begin
tmp:=TMemoryStream.Create;
try
// Zip File
tmp.LoadFromFile('C:\pic.jpg');
tmp:=Zip(tmp);
tmp.SaveToFile('C:\pic.zzip');
// Unzip File
tmp.LoadFromFile('C:\pic.zzip');
tmp:=UnZip(tmp);
tmp.SaveToFile('C:\pic.jpg');
finally
tmp.Free;
end;
موفق باشيد .