Alat pengembangan RAD Delphi 5.0 yang diluncurkan oleh Borland Company adalah alat pengembangan utama pada platform Windows. Lingkungan pengembangan visual dan fungsi pemrograman berorientasi objek yang kuat telah menarik banyak pengembang. Namun, beberapa programmer sering kesulitan mengompresi data dalam jumlah besar selama proses pengembangan sebenarnya, dan harus menemukan beberapa algoritma kompresi yang efisien atau mencari kontrol pihak ketiga di Internet untuk mencapai kompresi. Bukankah Delphi sendiri menyediakan fungsi ini? Faktanya, programmer Delphi telah mempertimbangkan hal ini. Mereka menyediakan dua file unit, Zlib.pas dan Zlibconst.pas, untuk memecahkan masalah kompresi data dan mencapai rasio kompresi data yang tinggi. Kedua file ini disimpan di direktori lib InfoExtras pada CD instalasi Delphi 5.0. Selain itu, file Obj yang direferensikan oleh unit Zlib.pas juga disimpan di direktori libObj InfoExtras. Artikel berikut menggunakan kompresi salinan layar sebagai contoh untuk memperkenalkan cara menggunakan fungsi ini.
Pertama, gunakan salinan layar untuk mengambil gambar keseluruhan layar saat ini, lalu simpan dalam memori sebagai format file BMP. Saat mengompresi, gunakan objek TComPRessionStream untuk mengompresi gambar asli dan menyimpannya dalam format file khusus; saat mendekompresi, gunakan objek TDecompressionStream untuk mendekompresi gambar terkompresi dan mengembalikannya ke file gambar berformat BMP. |
Buat file proyek baru, referensi Zlib.pas di bagian antarmuka unit utama, tempatkan dua tombol Button1 dan Button2 pada formulir utama, dan tulis kode panggilan prosedur yang sesuai di acara OnClick mereka. |
Bagian dari kode sumber program adalah sebagai berikut: |
Windows, Pesan, SysUtils, Kelas, Grafik, Kontrol, Formulir, Dialog, StdCtrls, Zlib; |
prosedur Button1Click(Pengirim: TObject); |
prosedur Button2Click(Pengirim: TObject); |
1. Tangkap gambar layar penuh |
prosedur GetScreen(var Bmp: TBitmap); |
MyCanvas := TCanvas.Buat; |
Kanvas Saya.Handle := Dc; |
MyRect:=Rect(0, 0,Layar.Lebar, Layar.Tinggi); |
//Gambar memiliki warna asli 24-bit, yang juga dapat disesuaikan dengan kebutuhan sebenarnya. |
Bmp.PixelFormat := pf24bit; |
Bmp.Lebar := MyRect.Right; |
Bmp.Tinggi := MyRect.Bottom; |
//Tangkap seluruh gambar layar |
Bmp.Canvas.CopyRect(MyRect, MyCanvas, MyRect); |
prosedur CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel); |
SourceStream: TCompressionStream; |
Aliran Tujuan: TMemoryStream; |
//Dapatkan ukuran asli aliran gambar |
Hitung := CompressedStream.Size; |
DestStream := TMemoryStream.Buat; |
SourceStream:=TCompressionStream.Buat |
(Tingkat Kompresi, DestStream); |
//SourceStream menyimpan aliran gambar asli |
CompressedStream.SaveToStream(SourceStream); |
//Kompres aliran gambar asli, dan aliran gambar terkompresi disimpan di DestStream. |
//Tulis ukuran gambar aslinya |
CompressedStream.WriteBuffer(Hitungan, SizeOf |
//Tulis aliran gambar terkompresi |
CompressedStream.CopyFrom(DestStream, 0); |
3. Pulihkan gambar terkompresi |
prosedur UnCompressBitmap(const CompressedStream: TFileStream; var Bmp: TBitmap); |
SourceStream: TDecompressionStream; |
Aliran Tujuan: TMemoryStream; |
//Baca ukuran gambar asli dari aliran gambar terkompresi |
CompressedStream.ReadBuffer(Hitungan, SizeOf(Hitungan)); |
//Alokasikan blok memori agar aliran gambar asli dapat dibaca berdasarkan ukuran gambar |
DestStream := TMemoryStream.Buat; |
SourceStream := TDecompressionStream.Create(CompressedStream); |
//Dekompresi aliran gambar terkompresi dan simpan di blok memori Buffer |
SourceStream.ReadBuffer(Buffer^, Hitung); |
//Simpan aliran gambar asli ke aliran DestStream |
DestStream.WriteBuffer(Buffer^, Hitung); |
DestStream.Position := 0;//Setel ulang penunjuk aliran |
//Muat aliran gambar asli dari aliran DestStream |
Bmp.LoadFromStream(DestStream); |
4. Tombol kompresi acara OnClick |
prosedur TForm1.Button1Click(Pengirim: TObject); |
Aliran Terkompresi: TMemoryStream; |
CompressedStream := TMemoryStream.Buat; |
//Tangkap seluruh layar saat ini dan simpan gambar ke objek Bmp GetScreen(Bmp); |
//Simpan gambar di objek Bmp ke aliran memori |
Bmp.SaveToStream(Stream Terkompresi); |
//Kompres aliran gambar asli sesuai dengan rasio kompresi default |
CompressBitmap(CompressedStream, clDefault); |
//Simpan aliran gambar terkompresi ke dalam file format khusus |
CompressedStream.SaveToFile(' C:cj.dat' ); |
Aliran Terkompresi.Gratis; |
5. Buka zip tombol acara OnClick |
procedure TForm1.Button2Click(Pengirim: TObject); |
Aliran Terkompresi: TFileStream; |
//Buka file format terkompresi khusus dalam mode read-only dari aliran file |
CompressedStream := TFileStream.Create(' C:cj.dat' , fmOpenRead); |
//Dekompresi aliran gambar terkompresi |
UnCompressBitmap(CompressedStream, Bmp); |
//Kembalikan aliran gambar asli ke file BMP yang ditentukan |
Bmp.SaveToFile(' C:cj.bmp' ); |
Streaming Terkompresi.Gratis; |
Selain itu, objek TCompressionStream juga menyediakan properti CompressionRate, yang digunakan untuk menggambarkan rasio kompresi setelah mengompresi data asli. Peristiwa OnProgress dipicu selama proses kompresi dan dekompresi . |
Kode di atas lolos debugging dan berjalan di Delphi 5.0. |