Delphi資料壓縮處理(2) (轉)

worldblog發表於2007-12-09
Delphi資料壓縮處理(2) (轉)[@more@]

 

資料處理(2)

      Buffer: PChar;

      Count: Integer;

     Begin

      file://從被壓縮的影像流中讀出原始影像的尺寸

      CompressedStream.Reauffer(Count, SizeOf(Count));

      file://根據影像尺寸大小為將要讀入的原始影像流分配塊

      GetMem(Buffer, Count);

      DestStream := TMemoryStream.Create;

      Stream := 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: T);

     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中執行透過。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990236/,如需轉載,請註明出處,否則將追究法律責任。

相關文章