⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 z i p
💻 ~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 + -