Delphi数据压缩处理(2)

Delphi教程 2025-08-12

Delphi数据压缩处理(2)

   Buffer: PChar;

   Count: Integer;

  Begin

   file://从被压缩的图像流中读出原始图像的尺寸

   ComPRessedStream.ReadBuffer(Count, SizeOf(Count));

   file://根据图像尺寸大小为将要读入的原始图像流分配内存块

   GetMem(Buffer, Count);

   DestStream := TMemoryStream.Create;

   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;

4.压缩按钮 OnClick事件

 procedure TForm1.Button1Click(Sender: TObject);

  var

   Bmp: TBitmap;

   CompressedStream: TMemoryStream;

  begin

   Bmp := TBitmap.Create;

   CompressedStream := TMemoryStream.Create;

  Try

    file://捕获当前整个屏幕 ,将图像保存至 Bmp对象中 GetScreen(Bmp);

   file://将 Bmp对象中的图像保存至内存流中

   Bmp.SaveToStream(CompressedStream);

   file://按缺省的压缩比例对原始图像流进行压缩

   CompressBitmap(CompressedStream, clDefault);

   file://将压缩之后的图像流保存为自定义格式的文件

   CompressedStream.SaveToFile(‘ C:cj.dat’ );

   finally

   Bmp.Free;

   CompressedStream.Free;

  end;

 end;

5.解压缩按钮 OnClick事件

  procedure TForm1.Button2Click(Sender: TObject);

   var

    CompressedStream: TFileStream;

    Bmp: TBitmap;

   begin

    Bmp := TBitmap.Create;

    file://以文件流的只读方式打开自定义的压缩格式文件

    CompressedStream := TFileStream.Create(‘ C:cj.dat’ , fmOpenRead);

   Try

    file://将被压缩的图像流进行解压缩

    UnCompressBitmap(CompressedStream, Bmp);

    file://将原始图像流还原为指定的 BMP文件

    Bmp.SaveToFile(‘ C:cj.bmp’ );

    finally

    Bmp.Free;

    CompressedStream.Free;

   end;

   end;

 此外 TCompressionStream对象还提供了 CompressionRate属性,该属性用于描述对原始数据进行压缩后的压缩比率,而 OnProgress事件在压缩与解压缩过程中都会被触发,开发人员可以在该事件中编写用于显示进度的代码。

 以上代码在 Delphi 5.0中调试运行通过。