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中偵錯運行通過。