📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ShellCtrls,Zlib;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);
procedure UnCompressBitmap(const CompressedStream: TFileStream; destfilename: string);
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
//压缩文件
// file:// 获得图像流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
//file://SourceStream 中保存着原始的图像流
CompressedStream.SaveToStream(SourceStream);
//file:// 将原始图像流进行压缩 , DestStream 中保存着压缩后的图像流
SourceStream.Free;
CompressedStream.Clear;
//file:// 写入原始图像的尺寸
CompressedStream.WriteBuffer(Count,SizeOf(Count));
//file:// 写入经过压缩的图像流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;
procedure UnCompressBitmap(const CompressedStream: TFileStream; destfilename: string);
var
SourceStream: TDecompressionStream;
DestStream: TfileStream;
Buffer: PChar;
Count: Integer;
Begin
//解压文件
//file:// 从被压缩的图像流中读出原始图像的尺寸
CompressedStream.ReadBuffer(Count, SizeOf(Count));
//file:// 根据图像尺寸大小为将要读入的原始图像流分配内存块
GetMem(Buffer, Count);
DestStream := TfileStream.Create(destfilename,fmCreate);
SourceStream := TDecompressionStream.Create(CompressedStream);
Try
//file:// 将被压缩的图像流解压缩 ,然后存入 Buffer 内存块中
SourceStream.ReadBuffer(Buffer^, Count);
//file:// 将原始图像流保存至 DestStream 流中
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;// 复位流指针
//从 DestStream 流中载入原始图像流
//Bmp.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CompressedStream: TMemoryStream;
MS: TFileStream;
begin
//压缩
CompressedStream := TMemoryStream.Create;
Try
//file:// 捕获当前整个屏幕 ,将图像保存至 Bmp 对象中 GetScreen(Bmp);
//file:// 将 Bmp 对象中的图像保存至内存流中
MS:=TFileStream.Create(edit2.Text, fmOpenRead);
CompressedStream.CopyFrom(ms,ms.Size);
//file:// 按缺省的压缩比例对原始图像流进行压缩
CompressBitmap(CompressedStream, clDefault);
// file:// 将压缩之后的图像流保存为自定义格式的文件
CompressedStream.SaveToFile(edit1.Text);
finally
ms.Free;
CompressedStream.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
CompressedStream: TFileStream;
Bmp: TBitmap;
begin
//解压
//file:// 以文件流的只读方式打开自定义的压缩格式文件
CompressedStream := TFileStream.Create(edit2.Text,fmOpenRead);
Try
//file:// 将被压缩的图像流进行解压缩
UnCompressBitmap(CompressedStream,edit1.Text);
//file:// 将原始图像流还原为指定的 BMP 文件
finally
CompressedStream.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -