معالجة ضغط بيانات دلفي (2)
المخزن المؤقت: PChar؛
العدد: عدد صحيح؛
يبدأ
file://اقرأ حجم الصورة الأصلي من دفق الصور المضغوطة
ComPRessedStream.ReadBuffer(Count, SizeOf(Count));
file://تخصيص كتل الذاكرة لقراءة دفق الصورة الأصلي بناءً على حجم الصورة
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
يحاول
file:// يقوم بفك ضغط تدفق الصور المضغوطة ويخزنها في كتلة ذاكرة Buffer
SourceStream.ReadBuffer(Buffer^, Count);
file://حفظ دفق الصورة الأصلي إلى دفق DestStream
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;// إعادة تعيين مؤشر الدفق
// قم بتحميل دفق الصورة الأصلي من دفق DestStream
Bmp.LoadFromStream(DestStream);
أخيراً
FreeMem(Buffer);
DestStream.Free;
نهاية؛
نهاية؛
4. حدث عند النقر على زر الضغط
الإجراء TForm1.Button1Click(Sender: TObject);
فار
Bmp: تبيتماب؛
البث المضغوط: TMemoryStream؛
يبدأ
Bmp := TBitmap.Create;
CompressedStream := TMemoryStream.Create;
يحاول
file://التقط الشاشة الحالية بأكملها واحفظ الصورة في كائن Bmp GetScreen(Bmp);
file:// يحفظ الصورة الموجودة في كائن Bmp في دفق الذاكرة
Bmp.SaveToStream(CompressedStream);
file://يضغط تدفق الصورة الأصلية وفقًا لنسبة الضغط الافتراضية
CompressBitmap(CompressedStream, clDefault);
file://احفظ دفق الصور المضغوطة كملف بتنسيق مخصص
CompressedStream.SaveToFile('C:cj.dat' );
أخيراً
Bmp.Free;
CompressedStream.Free;
نهاية؛
نهاية؛
5. حدث فك ضغط الزر عند النقر
الإجراء TForm1.Button2Click(Sender: TObject);
فار
تيار مضغوط: TFileStream؛
Bmp: تبيتماب؛
يبدأ
Bmp := TBitmap.Create;
file://يفتح ملفًا بتنسيق مضغوط مخصصًا في وضع القراءة فقط لدفق الملف
CompressedStream := TFileStream.Create(' C:cj.dat' , fmOpenRead);
يحاول
الملف: // فك ضغط دفق الصور المضغوطة
UnCompressBitmap(CompressedStream, Bmp);
file://استعادة دفق الصورة الأصلية إلى ملف BMP المحدد
Bmp.SaveToFile('C:cj.bmp' );
أخيراً
Bmp.Free;
CompressedStream.Free;
نهاية؛
نهاية؛
بالإضافة إلى ذلك، يوفر كائن TCompressionStream أيضًا خاصية CompressionRate، والتي يتم استخدامها لوصف نسبة الضغط بعد ضغط البيانات الأصلية. يتم تشغيل حدث OnProgress أثناء عمليات الضغط وإلغاء الضغط. يمكن للمطورين الكتابة في هذا الحدث لعرض التقدم .
يمرر الكود أعلاه تصحيح الأخطاء ويعمل في دلفي 5.0.