国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

Delphi數據壓縮處理(1)

2019-11-18 18:46:16
字體:
來源:轉載
供稿:網友
Delphi數據壓縮處理(1) 

   Borland公司推出的 RAD開發工具 Delphi 5.0作為 Windows平臺上的主流開發工具,其可視化的開發環境和面向對象編程的強大功能已經吸引了無數的開發人員。但是,一些程序員在實際的開發過程中卻時常為對大量的數據進行壓縮而傷透腦筋,不得不去查找一些高效的壓縮算法或在網上查找第三方的控件來實現壓縮。難道 Delphi本身沒有提供這個功能嗎?其實 Delphi的程序設計師早就考慮到了這一點,他們提供了 Zlib.pas和 Zlibconst.pas兩個單元文件來解決數據壓縮問題,實現了很高的數據壓縮比率。這兩個文件保存在 Delphi 5.0安裝光盤上 InfoExtraslib目錄下,此外,在 InfoExtraslibObj目錄中還保存了 Zlib.pas單元引用的 Obj文件。下面本文以壓縮一個屏幕拷貝為例介紹如何使用這項功能。

  解決思路

  首先利用屏幕拷貝捕捉到當前整個屏幕的圖像,然后在內存中保存為 BMP文件格式。壓縮時,使用 TComPRessionStream對象對原始圖像進行壓縮并且保存為自定義的文件格式;解壓縮時,使用 TDecompressionStream對象對被壓縮的圖像進行解壓縮,還原為 BMP格式的圖像文件。

  具體實現

  新建一個項目文件,在主單元的接口部分引用 Zlib.pas,在主表單上放置兩個按鈕 Button1、 Button2,在它們的 OnClick事件中寫上相應的過程調用代碼。

  部分程序源代碼如下:

  unit Unit1;

  interface

  uses

   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Zlib;

   type

    TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

   private

    { Private declarations }

   public

    { Public declarations }

   end;

   var

    Form1: TForm1;

    implementation

     {$ R* .DFM}

   1.捕捉全屏幕圖像

    procedure GetScreen(var Bmp: TBitmap);

    var

     Dc: HDC;

     MyCanvas: TCanvas;

     MyRect: TRect;

    begin

     Dc := GetWindowDC(0);

     MyCanvas := TCanvas.Create;

    try

     MyCanvas.Handle := Dc;

     MyRect:=Rect(0, 0,Screen.Width, Screen.Height);

     file://圖像為 24位真彩色,也可根據實際需要調整

     Bmp.PixelFormat := pf24bit;

     Bmp.Width := MyRect.Right;

     Bmp.Height := MyRect.Bottom;

     file://捕捉整個屏幕圖像

     Bmp.Canvas.CopyRect(MyRect, MyCanvas, MyRect);

     finally

     MyCanvas.Handle := 0;

     MyCanvas.Free;

     ReleaseDC(0, Dc);

    end;

   end;

 2.壓縮圖像

   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;


   3.還原被壓縮圖像

    procedure UnCompressBitmap(const CompressedStream: TFileStream; var Bmp: TBitmap);

     var

      SourceStream: TDecompressionStream;

      DestStream: TMemoryStream;

上一篇:Delphi數據壓縮處理(2)

下一篇:在Delphi中編寫控件的基本方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 朝阳市| 永靖县| 安国市| 洛隆县| 莱芜市| 桂平市| 淅川县| 蛟河市| 呈贡县| 克东县| 沅陵县| 新竹市| 临朐县| 沅陵县| 海安县| 上犹县| 新竹县| 焉耆| 昆明市| 云龙县| 京山县| 辽源市| 台北市| 玛曲县| 任丘市| 和政县| 梨树县| 南通市| 古丈县| 汝州市| 石阡县| 新竹市| 康马县| 中宁县| 西宁市| 永春县| 凤山市| 无锡市| 德昌县| 阿拉善盟| 晋州市|