jpg.SaveToStream(m1); //将JPG图象写入流中
jpg.free;如果用ZLIB对流进行压缩与解压缩呀?
解决方案 »
- 哪里找得到XPMan单元?
- 麻煩大哥看一下我的代碼,怪!執行一次只能更新一條記錄不能循環.
- Delphi 中如何调Code Explor 和 Object Inspector 的字体
- excel
- 求delphi7.0的crack文件:[email protected] 急!
- 如何隐藏一个父类的public属性?
- 愿爱我的人和我爱的人和我爱过的人和爱过我的人平安快乐
- 李维的书与技术并不是DELPHI开发发烧友们想象的那么高!
- 关于SetComplete,SetAbort,请大侠来帮忙
- 哪位大侠熟悉Crystal Report这个报表工具,请进!!(高分)
- 怎样实现,电脑一启动我的程序自动运行???
- 在dhtmledit中怎么插入背景音乐.
CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
//获得图像流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream := TCompressionStream.Create(CompressionLevel, DestStream);
Try
//SourceStream中保存着原始的图像流
CompressedStream.SaveToStream(SourceStream);
//将原始图像流进行压缩, DestStream中保存着压缩后的图像流
SourceStream.Free;
CompressedStream.Clear;
//写入原始图像的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的图像流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end; 还原被压缩图像
procedure UnCompressBitmap(const CompressedStream: TFileStream; var Bmp:
TBitmap);
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
Begin
//从被压缩的图像流中读出原始图像的尺寸
CompressedStream.ReadBuffer(Count, SizeOf(Count));
//根据图像尺寸大小为将要读入的原始图像流分配内存块
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
Try
//将被压缩的图像流解压缩,然后存入 Buffer内存块中
SourceStream.ReadBuffer(Buffer^, Count);
//将原始图像流保存至 DestStream流中
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;//复位流指针
//从 DestStream流中载入原始图像流
Bmp.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;
uses
ZLib, Classes;procedure Compress(CompressedStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
begin
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream := TCompressionStream.Create(clMax, DestStream);
try
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear;
CompressedStream.WriteBuffer(Count, SizeOf(Count));
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;procedure UnCompress(CompressedStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: integer;
begin
CompressedStream.Seek(0, soFromBeginning);
CompressedStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;
CompressedStream.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;
'=================================================================================
'压缩选项
Public Enum ZlibCompressionLevel
ZLIB_CompressionLevel_Fastest = 1 '最快压缩,速度最快,压缩率最低
ZLIB_CompressionLevel_Default = 2 '默认压缩,速度一般,压缩率相当
ZLIB_CompressionLevel_Max = 3 '最大压缩,速度最慢,压缩率最高
End Enum