การประมวลผลการบีบอัดข้อมูล Delphi (2)
บัฟเฟอร์: PChar;
นับ: จำนวนเต็ม;
เริ่ม
file://Read ขนาดภาพต้นฉบับจากสตรีมภาพที่บีบอัด
ComPRessedStream.ReadBuffer (นับ, SizeOf (นับ));
file://จัดสรรบล็อกหน่วยความจำสำหรับสตรีมรูปภาพต้นฉบับที่จะอ่านตามขนาดรูปภาพ
GetMem (บัฟเฟอร์, นับ);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create (CompressedStream);
พยายาม
file://decompresses สตรีมภาพที่บีบอัดและจัดเก็บไว้ในบล็อกหน่วยความจำ Buffer
SourceStream.ReadBuffer (บัฟเฟอร์ ^, นับ);
file://save สตรีมรูปภาพต้นฉบับไปยังสตรีม DestStream
DestStream.WriteBuffer (บัฟเฟอร์ ^, นับ);
DestStream.Position := 0;//รีเซ็ตตัวชี้สตรีม
//โหลดสตรีมรูปภาพต้นฉบับจากสตรีม DestStream
Bmp.LoadFromStream(DestStream);
ในที่สุด
FreeMem(บัฟเฟอร์);
DestStream.ฟรี;
จบ;
จบ;
4. ปุ่มบีบอัดเหตุการณ์ OnClick
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
var
Bmp: TBitmap;
สตรีมที่บีบอัด: TMemoryStream;
เริ่ม
Bmp := TBitmap.Create;
CompressedStream := TMemoryStream.Create;
พยายาม
file://จับภาพหน้าจอปัจจุบันทั้งหมดและบันทึกภาพลงในวัตถุ Bmp GetScreen(Bmp);
file:// บันทึกรูปภาพในวัตถุ Bmp ลงในสตรีมหน่วยความจำ
Bmp.SaveToStream(บีบอัดสตรีม);
file://บีบอัดสตรีมภาพต้นฉบับตามอัตราส่วนการบีบอัดเริ่มต้น
CompressBitmap(CompressedStream, clDefault);
file://บันทึกสตรีมภาพที่บีบอัดเป็นไฟล์ในรูปแบบที่กำหนดเอง
CompressedStream.SaveToFile(' C:cj.dat' );
ในที่สุด
Bmp.ฟรี;
CompressedStream.ฟรี;
จบ;
จบ;
5. ปุ่มคลายซิปเหตุการณ์ OnClick
ขั้นตอน TForm1.Button2Click (ผู้ส่ง: TObject);
var
สตรีมที่บีบอัด: TFileStream;
Bmp: TBitmap;
เริ่ม
Bmp := TBitmap.Create;
file://opens ไฟล์รูปแบบการบีบอัดแบบกำหนดเองในโหมดอ่านอย่างเดียวของสตรีมไฟล์
CompressedStream := TFileStream.Create(' C:cj.dat' , fmOpenRead);
พยายาม
file://decompresses สตรีมภาพที่บีบอัด
UnCompressBitmap (บีบอัดสตรีม, Bmp);
file:// คืนค่าสตรีมรูปภาพต้นฉบับเป็นไฟล์ BMP ที่ระบุ
Bmp.SaveToFile(' C:cj.bmp' );
ในที่สุด
Bmp.ฟรี;
CompressedStream.ฟรี;
จบ;
จบ;
นอกจากนี้ อ็อบเจ็กต์ TCompressionStream ยังมีคุณสมบัติ CompressionRate ซึ่งใช้เพื่ออธิบายอัตราส่วนการบีบอัดหลังจากการบีบอัดข้อมูลต้นฉบับ เหตุการณ์ OnProgress จะถูกทริกเกอร์ในระหว่างกระบวนการบีบอัดและคลายการบีบอัด นักพัฒนาสามารถเขียนในเหตุการณ์นี้เพื่อแสดงความคืบหน้าได้ .
โค้ดด้านบนผ่านการดีบักและทำงานใน Delphi 5.0