SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
4/28/2012
MULTIMEDIA ASSIGNMENT #2 | JAEGER & ZGTR & HASSNOV & POD
‫اهلل‬ ‫عبد‬ ‫أبو‬ ‫إسماعيل‬‫شاكر‬ ‫محمد‬
‫سرحان‬ ‫حسه‬ ‫محمد‬‫زوجي‬ ‫مهدي‬
‫الصوص‬ ‫مدحت‬
2102
LOSSLESS COMPRESSION ENGINE
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫خوارزمية‬ Adaptive Hoffman 1
Contents
1‫خوارزمية‬Adaptive Hoffman...................................................................................................................3
1.1‫خطوات‬‫العمل‬....................................................................................................................................3
1.1.1‫البحث‬.....................................................................................................................................3
1.1.1‫التعامل‬‫مع‬‫ناتج‬‫البحث‬....................................................................................................................3
1.1.3‫تحديث‬‫الشجرة‬..............................................................................................................................3
1.1.1‫إعادة‬‫الرمز‬‫المناسب‬......................................................................................................................3
1.1‫التحسينات‬‫على‬‫ّة‬‫ي‬‫الخوارزم‬.....................................................................................................................3
1.3‫تابع‬‫البحث‬........................................................................................................................................3
2‫عرض‬‫الفيديو‬‫اثناء‬‫فك‬‫الضغط‬.......................................................................................................1
1.1‫كيفية‬‫استخدام‬VLC Player:................................................................................................................5
3‫الخوارزميات‬‫اإلضافية‬..................................................................................................................6
‫مالحظة‬..................................................................................................................................................6
3.1‫خوارزمية‬RLE‫الرئيسة‬(RLEBasic)......................................................................................................7
3.1.1‫خورازمية‬‫الضغط‬........................................................................................................................7
3.1.2‫خوارزمية‬‫فك‬‫الضغط‬....................................................................................................8
3.1‫خوارزمية‬Method1RLE...................................................................................................................9
3.2.1‫خوارزمية‬‫الضغط‬.....................................................................................................................9
3.2.2‫خوارزمية‬‫فك‬‫الضغط‬...............................................................................................................11
3.3‫خوارزمية‬Method2RLE.................................................................................................................11
3.3.1‫خوارزمية‬‫الضغط‬.......................................................................................................11
3.3.2‫خوارزمية‬‫فك‬‫الضغط‬..................................................................................................................11
3.1‫خوارزمية‬QuadTreeRLE................................................................................................................11
3.4.1‫خوارزمية‬‫الضغط‬.......................................................................................................................11
3.4.2‫خوارزمية‬‫فك‬‫الضغط‬..................................................................................................................13
3.5‫الخوارزميات‬‫المعتمدة‬‫على‬‫القواميس‬‫المتغيرة‬‫بشكل‬‫ديناميكي‬Adaptive Dictionary.......................................13
3.5.1‫خوارزمية‬LZ77........................................................................................................................13
‫النافذة‬Window....................................................................................................................................13
‫المكان‬‫المحجوز‬‫قدما‬Buffer.....................................................................................................................11
‫بنية‬‫المعطيات‬Buffer..............................................................................................................................11
3.5.1‫خوارزمية‬LZW........................................................................................................................15
3.6‫خوارزمية‬Arithmetic coding.........................................................................................................17
1‫بنية‬‫المشروع‬(‫الخوارزميات‬‫اإلضافية‬).........................................................................................................18
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫خوارزمية‬ Adaptive Hoffman 2
5‫واجهة‬‫المستخدم‬)‫جميعها‬ ‫ّات‬‫ي‬‫(الخوارزم‬......................................................................................................11
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫خوارزمية‬ Adaptive Hoffman 3
1‫خوارزمية‬Adaptive Hoffman
‫ّة‬‫ي‬‫خوارزم‬ ‫في‬ ‫التشفير‬ ‫وفك‬ ‫التشفير‬Adaptive Huffman‫في‬ ‫وتشتركان‬ ،‫ا‬ّ‫د‬‫ج‬ ‫كبير‬ ‫لحد‬ ‫متشابهان‬
‫عام‬ ‫بشكل‬ ‫ّتين‬‫ي‬‫الخوارزم‬ ‫شرح‬ ‫في‬ ‫الخطوات‬ ‫هذه‬ ‫تظهر‬ .‫عديدة‬ ‫خطوات‬
1.1‫العمل‬ ‫خطوات‬
‫الخطوات‬–‫سابقا‬ ‫ذكرنا‬ ‫كما‬-‫ال‬ ‫وهذه‬ ،‫التشفير‬ ‫وفك‬ ‫التشفير‬ ‫بين‬ ‫العام‬ ‫بالشكل‬ ‫متطابقة‬:‫هي‬ ‫خطوات‬
1.1.1‫البحث‬
‫المدخل‬ ‫الرمز‬ ‫عن‬ ‫البحث‬
‫بتات‬ ‫تتابع‬ ‫فيكون‬ ‫التشفير‬ ‫فك‬ ‫حال‬ ‫في‬ ‫أما‬ ،‫بايت‬ ‫هو‬ ‫الرمز‬ ‫هذا‬ ‫يكون‬ ‫التشفير‬ ‫حال‬ ‫في‬
1.1.1‫البحث‬ ‫ناتج‬ ‫مع‬ ‫التعامل‬
‫عدد‬ ‫زيادة‬ ّ‫م‬‫ويت‬ ‫للبايت‬ ‫جديد‬ ‫ورود‬ ‫أنه‬ ‫على‬ ‫التعامل‬ ّ‫م‬‫يت‬ ،‫سابقا‬ ‫موجودة‬ ‫لعقدة‬ ‫الوصول‬ ّ‫م‬‫ت‬ ‫حال‬ ‫في‬
‫بمقدار‬ ‫تكراره‬ ‫مرات‬1‫أما‬ ،‫التشفير‬ ‫حال‬ ‫في‬ ‫المطلوب‬ ‫البايت‬ ‫نوجد‬ ‫(لم‬ ‫مسدود‬ ‫لخط‬ ‫الوصول‬ ّ‫م‬‫ت‬ ‫حال‬ ‫في‬
‫والعقدة‬New.‫جديدة‬ ‫عقدة‬ ‫إضافة‬ ّ‫م‬‫فيت‬ )‫التشفير‬ ‫فك‬ ‫حال‬ ‫في‬
1.1.1‫الشجرة‬ ‫تحديث‬
( ‫صالحة‬ ‫شجرة‬ ‫تبقى‬ ‫لكي‬ ‫الشجرة‬ ‫بتحديق‬ ‫القيام‬ ‫الضروري‬ ‫من‬Huffman Treeّ‫المرجو‬ ‫ق‬ّ‫ق‬‫وتح‬ )
‫الحال‬ ‫في‬ ‫الشجرة‬ ‫وتحديث‬ ،‫ّة‬‫ي‬‫الخوارزم‬ ‫من‬)‫حديثا‬ ‫المضافة‬ ‫(أو‬ ‫أخيرا‬ ‫ثة‬ّ‫د‬‫المح‬ ‫العقدة‬ ‫من‬ ‫يبدأ‬ ،‫واحد‬ ‫تين‬
.‫الشجرة‬ ‫لجذر‬ ‫ليصل‬ ‫ويصعد‬
1.1.1‫المناسب‬ ‫الرمز‬ ‫إعادة‬
‫بايت‬ ‫فيكون‬ ‫التشفير‬ ‫فك‬ ‫حالة‬ ‫في‬ ‫أما‬ ،)‫بتات‬ ‫(تتالي‬ ‫أكثر‬ ‫أو‬ ‫بايت‬ ‫أو‬ ‫بت‬ ‫نرد‬ ‫قد‬ ‫التشفير‬ ‫حال‬ ‫في‬
.‫العامة‬ ‫بالحالة‬
1.1‫ة‬ّ‫ي‬‫الخوارزم‬ ‫على‬ ‫التحسينات‬
‫تعمل‬ ‫ّة‬‫ي‬‫الخوارزم‬ ‫إن‬‫ال‬ ‫قد‬ ‫التحسينات‬ ‫أو‬ ‫التعديالت‬ ‫بعض‬ ‫وإن‬ ،‫عليها‬ ‫تعديل‬ ‫أي‬ ‫دون‬ ‫بطيء‬ ‫بشكل‬
.‫ملحوظ‬ ‫بشكل‬ ‫سرعتها‬ ‫ترفع‬ ‫ها‬ّ‫ن‬‫لك‬ ‫ا‬ّ‫د‬‫ج‬ ‫سريعة‬ ‫ّة‬‫ي‬‫الخوارزم‬ ‫تجعل‬
1.1‫البحث‬ ‫تابع‬
،‫ّن‬‫ي‬‫مع‬ ‫بايت‬ ‫قيمة‬ ‫تحمل‬ ‫التي‬ ‫العقدة‬ ‫عن‬ ‫ها‬ّ‫ل‬‫ك‬ ‫الشجرة‬ ‫في‬ ‫يبحث‬ ‫التشفير‬ ‫مرحلة‬ ‫في‬ ‫البحث‬ ‫تابع‬
‫عناصره‬ ‫عدد‬ ‫يصل‬ ‫قد‬ ‫شجرة‬ ‫في‬ ‫وتبحث‬‫إلى‬ ‫ا‬511‫في‬ ‫للبحث‬ ‫تحتاج‬ ‫ّا‬‫ي‬‫عمل‬ ‫بينما‬ ‫عنصر‬156‫عقدة‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
4
.‫األلياف‬ ‫فقط‬ ‫بل‬ ،‫الواصلة‬ ‫العقد‬ ‫ّها‬‫م‬‫ته‬ ‫ال‬ ‫حيث‬ ،‫ّا‬‫ي‬‫عمل‬ ‫األكثر‬ ‫على‬
( ‫لأللياف‬ ‫ّا‬‫ي‬‫نسب‬ ‫الصغير‬ ‫للعدد‬ ‫نظرا‬156‫قاموس‬ ‫في‬ ‫تخزينها‬ ‫فإن‬ )Dictionary‫كل‬ ‫كون‬ ‫ا‬ّ‫د‬‫ج‬ ‫عملي‬
‫ع‬ ‫ّر‬‫ب‬‫يع‬ ‫الذي‬ ‫البات‬ ‫رقم‬ ‫ل‬ّ‫يمث‬ ‫ّز‬‫ي‬‫مم‬ ‫مفتاح‬ ‫له‬ ‫منها‬.‫نه‬
1‫الضغط‬ ‫فك‬ ‫اثناء‬ ‫الفيديو‬ ‫عرض‬
‫الـ‬ ‫قيام‬ ‫اثناء‬Decoder‫فك‬ ‫بعد‬ ‫البايتات‬ ‫بتخزين‬ ‫نقوم‬ ,‫الشبكة‬ ‫طريق‬ ‫عن‬ ‫اليه‬ ‫القادم‬ ‫الملف‬ ‫ضغط‬ ‫بفك‬
‫بشكل‬ ‫الملف‬ ‫هذا‬ ‫محتويات‬ ‫بعرض‬ ‫نقوم‬ ‫الوقت‬ ‫نفس‬ ‫وفي‬ ,‫الصلب‬ ‫القرص‬ ‫على‬ ‫ملف‬ ‫في‬ ‫ضغطها‬
.‫متزامن‬
‫الـ‬ ‫قدرة‬ ‫لعدم‬ ‫نظرا‬Components‫نت‬ ‫الـدوت‬ ‫بيئة‬ ‫في‬ ‫الموجودة‬-‫عموما‬ ‫الفيديو‬ ‫مشغالت‬ ‫او‬-‫على‬
‫الـ‬ ‫مكاتب‬ ‫باستخدام‬ ‫قمنا‬ ‫فيه‬ ‫الكتابة‬ ‫اثناء‬ ‫فيديو‬ ‫ملف‬ ‫عرض‬VLC Player‫خوارزمية‬ ‫الى‬ ‫باالضافة‬
.‫الضغط‬ ‫فك‬ ‫مع‬ ‫متزامن‬ ‫بشكل‬ ‫محتواه‬ ‫وعرض‬ ‫الملف‬ ‫تشغيل‬ ‫من‬ ‫تمكنا‬ ‫بسيط‬
‫م‬ ‫اسرع‬ ‫الفديو‬ ‫ملف‬ ‫قراءة‬ ‫سرعة‬ ‫بأن‬ ‫المشكلة‬ ‫تكمن‬‫الملف‬ ‫تشغيل‬ ‫فعند‬ .‫الكتابة‬ ‫و‬ ‫الضغط‬ ‫فك‬ ‫سرعة‬ ‫ن‬
‫يرفض‬ ‫وقد‬ ,‫الملف‬ ‫بايتات‬ ‫تتمنة‬ ‫وجود‬ ‫لعدم‬ ‫وذلك‬ ,‫العرض‬ ‫بايقاف‬ ‫المشغل‬ ‫يقوم‬ ‫نهايته‬ ‫الى‬ ‫والوصول‬
.‫ترويسته‬ ‫اكتمال‬ ‫لعدم‬ ‫الملف‬ ‫تشغيل‬
‫الـ‬ ‫مكاتب‬ ‫استخدام‬ ‫على‬ ‫يعتمد‬ ‫المتبع‬ ‫الحل‬VLC Player‫توقف‬ ‫وعند‬ ,‫الفيديو‬ ‫محتوى‬ ‫لعرض‬
‫العرض(لل‬‫ثم‬ ,‫الفيديو‬ ‫ملف‬ ‫من‬ ‫جزء‬ ‫كتابة‬ ‫الكتمال‬ ‫معينة‬ ‫زمنية‬ ‫فترة‬ ‫بانتظار‬ ‫نقوم‬ )َ‫ا‬‫انف‬ ‫المذكور‬ ‫سبب‬
‫الملف‬ ‫عرض‬ ‫نكمل‬ ‫وثم‬ ,‫قصيرة‬ ‫زمنية‬ ‫لفترة‬ ‫بالمحتوى‬ ‫العودة‬ ‫المشغل‬ ‫من‬ ‫نطلب‬
‫مكاتب‬ ‫ان‬ ‫بما‬VLC Player‫الـ‬ ‫بلغة‬ ‫مكتوبة‬c++‫الـ‬ ‫هي‬ ‫عليها‬ ‫نعمل‬ ‫التي‬ ‫والبيئة‬dotnet‫فقمنا‬
‫ط‬ ‫باستخدام‬‫الـ‬ ‫ريقة‬P/Invoke‫التالي‬ ‫بالشكل‬ ‫المكاتب‬ ‫هذا‬ ‫الستخدام‬
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl)]
public static extern void libvlc_media_player_play(IntPtr player, ref
libvlc_exception_t ex);
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫عرض‬‫الفيديو‬‫اثناء‬‫فك‬‫الضغط‬ 5
‫الـ‬ ‫يحدد‬ ‫حيث‬DllImport‫المفتاحية‬ ‫الكلمة‬ ‫تدل‬ .‫استعمالها‬ ‫نريد‬ ‫التي‬ ‫المكتبة‬ ‫اسم‬extern‫ان‬ ‫على‬
.‫خارجية‬ ‫مكتبة‬ ‫في‬ ‫معرف‬ ‫التالي‬ ‫التابع‬
‫مالحظة‬‫المكتبة‬ ‫في‬ ‫المعرف‬ ‫التابع‬ ‫اسم‬ ‫هنا‬ ‫التابع‬ ‫اسم‬ ‫يوافق‬ ‫ان‬ ‫البد‬ :
1.1‫استخدام‬ ‫كيفية‬VLC Player:
1.‫بانشاء‬ ‫نقوم‬Instance‫الـ‬ ‫من‬VLC‫تابع‬ ‫باستخدام‬libvlc_new
1.‫بالـ‬ ‫يسمى‬ ‫ما‬ ‫ننشئ‬media‫باستخدام‬ ‫عرضه‬ ‫نود‬ ‫الذي‬ ‫الملف‬ ‫ويمثل‬libvlc_media_new
3.( ‫المشغل‬ ‫نعرف‬player‫التابع‬ ‫طريق‬ ‫عن‬ ‫السابق‬ ‫الميديا‬ ‫بعرض‬ ‫سيقوم‬ ‫والذي‬ )
libvlc_media_player_new_from_media
4.‫التابع‬ ‫باستخدام‬ ‫بالعرض‬ ‫البدء‬ ‫المشغل‬ ‫من‬ ‫نطلب‬libvlc_media_player_play
‫التالية‬ ‫التوابع‬ ‫طريق‬ ‫عن‬ ‫بالمشغل‬ ‫التحكم‬ ‫يمكن‬
Libvlc_media_player_stop:.‫العرض‬ ‫بايقاف‬ ‫يقوم‬
Libvlc_media_player_pause:.‫مؤقت‬ ‫بشكل‬ ‫العرض‬ ‫يوقف‬
Libvlc_media_player_get_position:‫الـ‬ ‫بين‬ ‫قيمة‬ ‫يرد‬[0,1]‫تم‬ ‫التي‬ ‫النسبة‬ ‫وتمثل‬
‫الملف‬ ‫من‬ ‫عرضها‬
Libvlc_media_player_set_position:‫معينة‬ ‫نقطة‬ ‫من‬ ‫ابتداءا‬ ‫المحتوى‬ ‫بعرض‬ ‫يقوم‬
Libvlc_media_player_set_drawable:‫عليها‬ ‫الفديو‬ ‫عرض‬ ‫نود‬ ‫التي‬ ‫النافذة‬ ‫يحدد‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 6
1‫اإلضافية‬ ‫الخوارزميات‬
‫للضغط‬ ‫اإلضافية‬ ‫الخوارزميات‬ ‫من‬ ‫العديد‬ ‫بإضافة‬ ‫المشروع‬ ‫هذا‬ ‫في‬ ‫قمنا‬‫بالمعلومات‬ ‫المحتفظ‬
‫هي‬ ‫كما‬(Lossless Compression)‫والنصوص‬ ‫الصور‬ ‫لضغط‬ ‫وذلك‬‫هنا‬ ‫سنذكرها‬.
‫مالحظة‬
‫الضغط‬ ‫وفك‬ ‫(الضغط‬ ‫الخوارزميات‬ ‫توابع‬ ‫جميع‬Encode/Decode)‫توابع‬ ‫ضمن‬ ‫هي‬static
‫بـ‬ ‫متعلق‬ ‫غير‬ ‫الضغط‬ ‫وفك‬ ‫الضغط‬ ‫ألن‬ ‫وذلك‬stream‫مثال‬ ‫الضغط‬ ‫فك‬ ‫خوارزمية‬ ‫فعلى‬ ‫معينة‬
‫لها‬ ‫المقابلة‬ ‫الضغط‬ ‫خوارزمية‬ ‫بنفس‬ ‫مضغوطة‬ ‫تكون‬ ‫أن‬ ‫شريطة‬ ‫تكن‬ ‫مهما‬ ‫المعطيات‬ ‫فك‬
‫الـ‬ ‫بنية‬ ‫نفس‬ ‫لها‬ ‫وبالتالي‬stream.‫إطالقا‬ ‫بمحتواها‬ ‫العلم‬ ‫دون‬ ‫فقط‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 7
1.1‫خوارزمية‬RLE( ‫الرئيسة‬RLEBasic)
،‫والصور‬ ‫للنصوص‬ ‫خوارزمية‬ ‫وهو‬‫عدد‬ ‫حفظ‬ ‫على‬ ‫تعتمد‬‫وإضافته‬ ‫المحرف‬ ‫مرور‬ ‫تكرار‬
‫مع‬ ‫المضغوطة‬ ‫للسلسلة‬8‫إتمام‬ ‫كل‬ ‫مع‬ ‫تضاف‬ ‫أصفار‬8.‫ضغوطات‬
‫الـ‬ ‫خوارزميات‬ ‫جميع‬ ‫في‬ ‫نستخدم‬RLE‫البنية‬DataUnit:‫التكرارات‬ ‫لحفظ‬
1.1.1‫خورازمية‬‫الضغط‬
private static Stream EncodeStream(Stream streamOfIds)
{
Stream compressedStream;
Stream miniCompressedStream;
flagStr = ("00000000");
int counterFlag = 0;
for (int i = 0; i < streamOfIds.Count; i++)
{
counterFlag++;
if (ShouldInsertFlag(counterFlag))
{
compressedStream.AddRange(flagStr);
compressedStream.AddRange(miniCompressedStream);
counterFlag = 1;
flagStr = ("00000000");
}
DataUnit dataUnit = CatchNextTokenEncode(streamOfIds, i);
if (dataUnit.RepeatCounter > 1)
{
miniCompressedStream.Add(dataUnit.RepeatCounter);
flagStr[counterFlag] = '1';
i += dataUnit.RepeatCounter - 1;
}
miniCompressedStream.Add(dataUnit.Id);
}
return compressedStream;
}
DataUnit
{
byte Id;
int RepeatCounter;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 8
1.1.1‫الضغط‬ ‫فك‬ ‫خوارزمية‬
private static Stream Decode (Stream OfIds)
{
Stream original;
string currentFlagStr = “”;
int counterFlag = 0;
for (int i = 0; i < OfIds.Count; i++)
{
if (ShouldRetrieveFlag(counterFlag))
{
currentFlagStr = GetString(OfIds, i, 8);
counterFlag = 8;
i += 7;
}
else
{
Stream nextTokenList = CatchNextTokenDecode(OfIds, i, currentFlagStr[8-ounterFlag]);
original.AddRange(nextTokenList);
if (nextTokenList.Count > 2)
{
i++;
}
}
counterFlag--;
}
return original;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 9
1.1‫خوارزمية‬Method1RLE
‫بتجميع‬ ‫تقوم‬ ‫حيث‬ ‫الصورة‬ ‫في‬ ‫المعلومات‬ ‫تكرار‬ ‫على‬ ‫تعتمد‬ ‫ألنها‬ ‫وذلك‬ ،‫فقط‬ ‫للصور‬ ‫خوارزمية‬ ‫وهي‬
‫ضمن‬ ‫حدا‬ ‫على‬ ‫سطر‬ ‫كل‬ ‫معلومات‬DataUnits
1.1.1‫الضغط‬ ‫خوارزمية‬
:‫التالية‬ ‫الخوارزمية‬ ‫على‬ ‫الضغط‬ ‫معلومات‬ ‫تجميع‬ ‫يعتمد‬
public static List<List<DataUnit>> EncodeImage(Bitmap imageToEncode, ref
CompressionDataInfo info)
{
TimeChecker timeChecker = new TimeChecker();
timeChecker.S1();
List<List<DataUnit>> compressedStream = new List<List<DataUnit>>();
List<List<Color>> colorArr = ImageManipulator.GetBitmapList(imageToEncode);
for (int i = 0; i < colorArr.Count; i++)
{
Stream currentRow = colorArr[i].Select(color =>
color.ToArgb().ToString()).ToList();
List<DataUnit> currentRowTokens = TokenizeRow(currentRow);
compressedStream.Add(currentRowTokens);
}
info.EncodingStreamCount = compressedStream.Count;
info.TimeEncoding = timeChecker.S2();
return compressedStream;
}
private static List<DataUnit> TokenizeRow(Stream currentRow)
{
List<DataUnit> listToReturn = new List<DataUnit>();
for (int i = 0; i < currentRow.Count; i++)
{
DataUnit dataUnit = RLEBasic.CatchNextTokenEncode(currentRow, i);
listToReturn.Add(dataUnit);
if (dataUnit.RepeatCounter > 1)
{
i += dataUnit.RepeatCounter - 1;
}
}
return listToReturn;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 10
1.1.1‫الضغط‬ ‫فك‬ ‫خوارزمية‬
‫المعطيات‬ ‫بنى‬ ‫فك‬ ‫على‬ ‫تعتمد‬ ‫بسيطة‬DataUnits‫جديد‬ ‫من‬ ‫الصورة‬ ‫بناء‬ ‫وإعادة‬ ‫سطر‬ ‫كل‬ ‫في‬
1.1‫خوارزمية‬Method2RLE
‫فقط‬ ‫للصور‬ ‫خوارزمية‬ ‫وهي‬‫تقوم‬ ‫حيث‬ ‫الصورة‬ ‫في‬ ‫المعلومات‬ ‫تكرار‬ ‫على‬ ‫تعتمد‬ ‫ألنها‬ ‫وذلك‬ ،‫كالسابقة‬
‫ضمن‬ ‫حدا‬ ‫على‬ ‫سطر‬ ‫كل‬ ‫معلومات‬ ‫بتجميع‬DataUnits‫مشابهة‬‫ما‬ ‫نوعا‬‫لـ‬RLE Method1‫ولكنها‬
‫بالـ‬ ‫التالي‬ ‫بالسطر‬ ‫والبداية‬ ‫بالسطور‬ ‫اإلحاطة‬ ‫على‬ ‫تعتمد‬index‫وبالتالي‬ ‫الحالي‬ ‫السطر‬ ‫لبداية‬ ‫المعاكس‬
‫تج‬ ‫محاولة‬‫من‬ ‫أكبر‬ ‫عدد‬ ‫ميع‬.‫المتشابهة‬ ‫األلوان‬
‫أنها‬ ‫على‬ ‫كاملة‬ ‫الصورة‬ ‫مع‬ ‫وإنما‬ ‫حدا‬ ‫على‬ ‫األسطر‬ ‫مع‬ ‫نتعامل‬ ‫نعد‬ ‫لم‬ ‫هنا‬ ‫أننا‬ ‫نستنتج‬ ‫أننا‬ ‫سبق‬ ‫مما‬
Stream‫عن‬ ‫تماما‬ ‫الضغط‬ ‫وفك‬ ‫الضغط‬ ‫في‬ ‫تختلف‬ ‫وبالتالي‬ ‫نهايتها‬ ‫حتى‬ ‫الصورة‬ ‫بداية‬ ‫من‬ ‫واحد‬
.‫سابقتها‬
1.1.1‫الضغط‬ ‫خوارزمية‬
‫بالسطور‬ ‫اإلحاطة‬ ‫على‬ ‫(تعتمد‬ ‫السابق‬ ‫الكالم‬ ‫مع‬ ‫المتفقة‬ ‫السلسلة‬ ‫بتوليد‬ ‫التالية‬ ‫الخوارزمية‬ ‫تقوم‬ ‫حيث‬
‫بالـ‬ ‫التالي‬ ‫بالسطر‬ ‫والبداية‬index‫من‬ ‫أكبر‬ ‫عدد‬ ‫تجميع‬ ‫محاولة‬ ‫وبالتالي‬ ‫الحالي‬ ‫السطر‬ ‫لبداية‬ ‫المعاكس‬
‫المتشابهة‬ ‫األلوان‬Wrapping around lines)
public static List<DataUnit> EncodeImage(Bitmap imageToEncode, ref CompressionDataInfo
info)
{
TimeChecker timeChecker = new TimeChecker();
timeChecker.S1();
List<DataUnit> compressedStream = new List<DataUnit>();
List<Color> colorArr =
RLEMethod2.WrapDataUnitsAroundCorners(ImageManipulator.GetBitmapList(imageToEncode));
List<string> currentRow = colorArr.Select(color =>
color.ToArgb().ToString()).ToList();
List<DataUnit> currentRowTokens = TokenizeRow(currentRow);
compressedStream.AddRange(currentRowTokens);
info.EncodingStreamCount = compressedStream.Count;
info.TimeEncoding = timeChecker.S2();
return compressedStream;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 11
1.1.1‫خوارزمية‬‫فك‬‫الضغط‬
‫عن‬ ‫عبارة‬ ‫ألنها‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫كامل‬ ‫سطر‬ ‫تجميع‬ ‫فحص‬ ‫مع‬ ‫المعطيات‬ ‫بنى‬ ‫ضغط‬ ‫فك‬ ‫على‬ ‫تعتمد‬
DataUnitStream‫فقط‬ ‫وإنما‬ ‫األسطر‬ ‫على‬ ‫داللة‬ ‫يوجد‬ ‫ال‬ ‫وبالتالي‬Stream‫من‬ ‫الصورة‬ ‫بناء‬ ‫ثم‬ ‫ومن‬
‫الضغط‬ ‫لفاكك‬ ‫الصورة‬ ‫أبعاد‬ ‫تمرير‬ ‫ضرورة‬ ‫هنا‬ ‫(الحظ‬ .‫جديد‬Decoder‫وتجميع‬ ‫الضغط‬ ‫بفك‬ ‫ليقوم‬
.)‫وعرضها‬ ‫الصورة‬ ‫طول‬ ‫أساس‬ ‫على‬ ‫الصورة‬ ‫أسطر‬
1.1‫خوارزمية‬QuadTreeRLE
‫لون‬ ‫يحتوي‬ ‫كامل‬ ‫قسم‬ ‫وجود‬ ‫حالة‬ ‫وفحص‬ ‫أقسام‬ ‫أربعة‬ ‫إلى‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫الشجرة‬ ‫تقسيم‬ ‫على‬ ‫تعتمد‬‫واحد‬
‫قطعة‬ ‫أنه‬ ‫على‬ ‫للشجرة‬ ‫إضافته‬ ‫وبالتالي‬Block‫من‬ ‫أكثر‬ ‫وجود‬ ‫حال‬ ‫في‬ ‫أما‬ ،‫فيه‬ ‫اإلكمال‬ ‫وعدم‬ ‫كامل‬
.‫وهكذا‬ ‫جديد‬ ‫من‬ ‫وفحصهم‬ ‫أقسام‬ ‫ألربعة‬ ‫لتقسيمه‬ ‫القسم‬ ‫هذه‬ ‫على‬ ‫عوديا‬ ‫االستدعاء‬ ‫فيتم‬ ‫لون‬
:‫التالية‬ ‫البنية‬ ‫لها‬ ‫فيها‬ ‫العقدة‬ ‫تكون‬ ‫شجرية‬ ‫بنية‬ ‫هنا‬ ‫لدينا‬ ‫سيكون‬
private static List<Color> WrapDataUnitsAroundCorners(List<List<Color>> listOfDataUnits)
{
List<Color> listOfWrappedUnits = new List<Color>();
bool isLineEven = true;
for (int i = 0; i < listOfDataUnits.Count; i++)
{
if (isLineEven)
{
listOfWrappedUnits.AddRange(listOfDataUnits[i]);
isLineEven = false;
}
else
{
for (int j = listOfDataUnits[i].Count - 1; j >= 0; j--)
{
listOfWrappedUnits.Add(listOfDataUnits[i][j]);
}
isLineEven = true;
}
}
return listOfWrappedUnits;
}
RLETreeNode
{
RLETreeNode[] _childs;
Color _color;
bool _isArea;
int _i;
int _j;
int _subArrDim;
int _level;
Area _area;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 12
.‫الضغط‬ ‫فيها‬ ‫يتم‬ ‫والتي‬ ‫الشجرية‬ ‫البنية‬ ‫لدينا‬ ‫ويكون‬
1.1.1‫خوارزمية‬‫الضغط‬
:‫التالي‬ ‫الشكل‬ ‫لها‬ ‫عودية‬ ‫خوارزمية‬ ‫وهي‬
‫التابع‬ ‫وفي‬ManipulateChilds‫لوج‬ ‫تبعا‬ ‫الحالية‬ ‫العقدة‬ ‫توليد‬ ‫معالجة‬ ‫يتم‬‫بنفس‬ ‫كاملة‬ ‫مساحة‬ ‫ود‬
‫لـ‬ ‫تبعا‬ ‫(أي‬ ‫ألوان‬ ‫عدة‬ ‫تحوي‬ ‫منطقة‬ ‫عن‬ ‫معبرة‬ ‫واصلة‬ ‫عقد‬ ‫توليد‬ ‫وبالتالي‬ ‫ال‬ ‫أو‬ ‫اللون‬b1, b2, b3,
b4.)
private void BuildQuadTreeRecursive(ref RLETreeNode currentBaseNode,int iWidth, int
jHeight, double arrSubDim, int currentLevel)
{
int intArrDim = (int)Math.Ceiling(arrSubDim);
Color[,] currentSubArrTopLeft = GetSubArr(iWidth, jHeight, intArrDim, currentLevel,
Area.TopLeft);
Color[,] currentSubArrTopRight = GetSubArr(iWidth, jHeight, intArrDim, currentLevel,
Area.TopRight);
Color[,] currentSubArrBottomLeft = GetSubArr(iWidth, jHeight, intArrDim, currentLevel,
Area.BottomLeft);
Color[,] currentSubArrBottomRight = GetSubArr(iWidth, jHeight, intArrDim, currentLevel,
Area.BottomRight);
bool b1 = CheckAreaIsBulk(currentSubArrTopLeft);
bool b2 = CheckAreaIsBulk(currentSubArrTopRight);
bool b3 = CheckAreaIsBulk(currentSubArrBottomLeft);
bool b4 = CheckAreaIsBulk(currentSubArrBottomRight);
ManipulateChilds(ref currentBaseNode, b1, b2, b3, b4,
currentSubArrTopLeft[0, 0],
currentSubArrTopRight[0, 0],
currentSubArrBottomLeft[0, 0],
currentSubArrBottomRight[0, 0],
iWidth,
jHeight,
intArrDim);
if (arrSubDim / 2 > 0)
{
if (!b1)
BuildQuadTreeRecursive(ref currentBaseNode.Childs[0], iWidth, jHeight,
arrSubDim / 2d, currentLevel + 1);
if (!b2)
BuildQuadTreeRecursive(ref currentBaseNode.Childs[1], iWidth + intArrDim, jHeight,
arrSubDim / 2d, currentLevel + 1);
if (!b3)
BuildQuadTreeRecursive(ref currentBaseNode.Childs[2], iWidth, jHeight + intArrDim,
arrSubDim / 2d, currentLevel + 1);
if (!b4)
BuildQuadTreeRecursive(ref currentBaseNode.Childs[3], iWidth + intArrDim, jHeight + intArrDim,
arrSubDim / 2d, currentLevel + 1);
}
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 13
1.1.1‫خوارزمية‬‫فك‬‫الضغط‬
( ‫كاملة‬ ‫مساحة‬ ‫هي‬ ‫هل‬ ‫العقدة‬ ‫لنمط‬ ‫تبعا‬ ‫الصورة‬ ‫وبناء‬ ‫الشجرة‬ ‫في‬ ‫التجول‬ ‫على‬ ‫تعتمد‬Area)‫فقط‬ ‫أنها‬ ‫أم‬
‫عن‬ ‫معبرة‬ ‫عقدة‬ ‫عبارة‬1.‫كاملة‬ ‫الشجرة‬ ‫ضمن‬ ‫عوديا‬ ‫التجول‬ ‫ويتم‬ ‫ألوان‬ ‫عدة‬ ‫من‬ ‫مؤلفة‬ ‫أصغر‬ ‫مناطق‬
‫الـ‬ ‫أن‬ ‫هنا‬ ‫(نالحظ‬Decoder‫الشجرية‬ ‫البنية‬ ‫ضمن‬ ‫الرئيسية‬ ‫العقدة‬ ‫(باألحرى‬ ‫الشجرية‬ ‫البنية‬ ‫فقط‬ ‫يأخد‬
‫سلسلة‬ ‫وليس‬ )‫كلها‬ ‫بالشجرة‬ ‫واصلة‬ ‫ألنها‬ ‫فقط‬Stream.)‫لفكها‬
1.3‫الخوارزميات‬‫القواميس‬ ‫على‬ ‫المعتمدة‬‫المتغيرة‬‫ديناميكي‬ ‫بشكل‬Adaptive Dictionary
‫خوارزميتي‬ ‫هنا‬ ‫سنناقش‬LZ77, LZW.
1.3.1‫خوارزمية‬LZ77
،‫والنصوص‬ ‫للصور‬ ‫تستخدم‬‫تعتمد‬‫النافذة‬ ‫مبدأ‬ ‫على‬Window‫المحارف‬ ‫لمعالجة‬ ‫المحجوز‬ ‫المكان‬ ‫و‬
‫قدما‬Lookahead Buffer
‫المعطيات‬ ‫بنية‬ ‫ضمن‬ ‫المعطيات‬ ‫وحفظ‬PhraseToken.
‫النافذة‬Window
public void InfiltrateTree(RLETreeNode currentNode, ref Color[,] colorArrRetieved)
{
foreach (RLETreeNode nodeChild in currentNode.Childs)
{
if (nodeChild.IsArea)
{
FillArea(nodeChild, colorArrRetieved);
}
else
{
if (nodeChild.Childs[0] == null)
{
FillArea(nodeChild, colorArrRetieved);
}
else
{
InfiltrateTree(nodeChild, ref colorArrRetieved);
}
}
}
}
SlidingWindow
{
int _slidingWindowSize;
ParitalStream _window;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 14
‫من‬:‫التوابع‬ ‫أهم‬
SlideAhead‫السلسلة‬ ‫ضمن‬ ‫للتقدم‬ :Stream‫الـ‬ ‫لحجم‬ ‫تبعا‬ ‫قدما‬Buffer‫المرادة‬ ‫والخطوة‬
GetBestToken‫الـ‬ ‫لمطابقتهامع‬ ‫وذلك‬ ‫محارف‬ ‫سلسلة‬ ‫أفضل‬ ‫إليجاد‬ ‫وذلك‬ :Buffer
ً‫ا‬‫قدم‬ ‫المحجوز‬ ‫المكان‬Buffer
:‫التوابع‬ ‫أهم‬ ‫من‬
GetNextStringToken‫السلسلة‬ ‫ضمن‬ ‫للتقدم‬ :Stream‫الـ‬ ‫لحجم‬ ‫تبعا‬ ‫قدما‬Buffer‫المرادة‬ ‫والخطوة‬
‫المعطيات‬ ‫بنية‬Buffer
1.1.3.3‫خوارزمية‬‫الضغط‬
LookaheadBuffer
{
int _bufferSize;
ParitalStream _buffer;
}
hraseToken
{
int _offset;
int _matchLength;
string _firstPostSymbol;
bool _isRawToken;
string _strInDictionary;
}
private List<PhraseToken> EncodeStream(Steam streamOfIds)
{
List<PhraseToken> encodedStream = new List<PhraseToken>();
for (int i = 0; i < streamOfIds.Count; i++)
{
Stream nextBufferBlock = _lookaheadBuffer.GetNextStringToken(streamOfIds, i);
PhraseToken nextPhraseToken = GetBestToken(i, nextBufferBlock, streamOfIds);
if (!nextPhraseToken.IsRawToken)
{
encodedStream.Add(nextPhraseToken);
_slidingWindow.SlideAhead(streamOfIds, i, nextPhraseToken.MatchLength + 1);
i += nextPhraseToken.MatchLength;
}
else
{
encodedStream.Add(nextPhraseToken);
_slidingWindow.SlideAhead(streamOfIds, i, 1);
}
}
return encodedStream;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 15
1.1.3.3‫خوارزمية‬‫فك‬‫الضغط‬
1.3.1‫خوارزمية‬LZW
‫نسخ‬ ‫حفظ‬ ‫وبالتالي‬ "‫السالسل‬ ‫"ألجزاء‬ ‫و‬ ‫للمحارف‬ ‫جدول‬ ‫بناء‬ ‫على‬ ‫تعتمد‬ ،‫والنصوص‬ ‫للصور‬ ‫تستخدم‬
‫بـ‬ ‫وتعويضها‬ ‫الجدول‬ ‫ضمن‬ ‫المتكررة‬ ‫السالسل‬index‫الـ‬ ‫عند‬ ‫الجدول‬ ‫من‬encoder.
‫الرئيسية‬ ‫األلوان‬ ‫ليضم‬ )‫ّا‬‫ي‬‫جزئ‬ ‫ّئ‬‫ي‬‫مه‬ ‫(جدول‬ ‫للجدول‬ ‫تهيئة‬ ‫عملية‬ ‫إجراء‬ ‫مثال‬ ‫الصور‬ ‫حالة‬ ‫في‬ ‫يتم‬‫ضمن‬
.‫الصورة‬
‫السلسلة‬ ‫فقط‬ ‫وإنما‬ ‫الضغط‬ ‫ك‬ّ‫ك‬‫لمف‬ ‫إضافة‬ ‫معلومات‬ ‫أية‬ ‫أو‬ ‫الجدول‬ ‫نقل‬ ‫يتم‬ ‫ال‬ ‫أنه‬ ‫الخوارزمية‬ ‫هذه‬ ‫فائدة‬
‫المرمزة‬Encoded Stream‫على‬ ‫فقط‬ ‫اعتمادا‬ ‫جديد‬ ‫من‬ ‫الجدول‬ ‫بناء‬ ‫الضغط‬ ‫مفكك‬ ‫طرف‬ ‫عند‬ ‫يتم‬ ‫و‬
.‫مسح‬ ‫أول‬ ‫عند‬ ‫بناؤه‬ ‫تم‬ ‫والذي‬ ‫البدائي‬ ‫الجدول‬
private Stream DecodeStream(List<PhraseToken> encodedStream)
{
Stream decodedStream;
for (int i = 0; i < encodedStream.Count; i++)
{
PhraseToken currentToken = encodedStream[i];
if (currentToken.IsRawToken)
{
decodedStream.Add(currentToken.StrInDictionary);
this.SlidingWindow.SlideAhead(decodedStream, decodedStream.Count - 1, 1);
}
else
{
int offset = currentToken.Offset;
int matchLength = currentToken.MatchLength;
string postSymbol = currentToken.FirstPostSymbol;
Stream strDecoded = this.SlidingWindow.GetStringInWindow(offset,
matchLength);
decodedStream.AddRange(strDecoded);
this.SlidingWindow.SlideAhead(decodedStream, decodedStream.Count -
strDecoded.Count, strDecoded.Count);
if (postSymbol != null)
decodedStream.Add(postSymbol);
this.SlidingWindow.SlideAhead(decodedStream, decodedStream.Count - 1, 1);
}
}
return decodedStream;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 16
1.1.3.3‫خوارزمية‬‫الضغط‬
1.1.3.3‫فك‬ ‫خوارزمية‬‫الضغط‬
‫ّز‬‫م‬‫(المر‬ ‫األول‬ ‫الطرف‬ ‫ضمن‬ ‫جزئيا‬ ‫المهيئ‬ ‫الجدول‬ ‫وعلى‬ ‫المرمزة‬ ‫السلسلة‬ ‫على‬ ‫تعتمد‬Encoder)
.‫معاكس‬ ‫بشكل‬ ‫ولكن‬ ‫المرمز‬ ‫لعملية‬ ‫مشابهة‬ ‫عملية‬ ‫إجراء‬ ‫ثم‬ ‫ومن‬
private Stream EncodeStream(Stream streamOfIds)
{
Stream encodedStream = new Stream();
InitializeTableColor(streamOfIds);
for (int i = 0; i < streamOfIds.Count; i++)
{
Stream window = GetNewWindow(streamOfIds, i);
if (window.Count > 1)
{
encodedStream.Add(Table.KeyOf(window.GetRange(0, window.Count -
1)).ToString());
if (!Table.Contains(window))
Table.AddToTable(window);
i += window.Count - 2;
}
else
{
encodedStream.Add(Table.KeyOf(window.ToList()).ToString());
if (!Table.Contains(window))
Table.AddToTable(window);
}
}
return encodedStream;
}
Stream DecodeStream(Stream encodedStream)
{
Stream dencodedStream;
Stream strSoFar ;
for (int i = 0; i < encodedStream.Count; i++)
{
int codeKey = Int32.Parse(encodedStream[i]);
Stream matchedCodeInTable = Table.GetMatchedSymbol(codeKey);
if (matchedCodeInTable == null)
{
matchedCodeInTable ;
matchedCodeInTable.AddRange(strSoFar);
matchedCodeInTable.Add(strSoFar[0]);
}
dencodedStream.AddRange(matchedCodeInTable);
if (strSoFar.Count != 0)
{
Stream listToAdd ;
listToAdd.AddRange(strSoFar);
listToAdd.Add(matchedCodeInTable[0]);
this.Table.AddToTable(listToAdd);
}
strSoFar.Clear();
strSoFar.AddRange(matchedCodeInTable);
}
return dencodedStream;
}
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫الخوارزميات‬‫اإلضافية‬ 17
1.3‫خوارزمية‬Arithmetic coding
‫الخوارزمية‬‫في‬‫مجاالت‬ ‫يحوي‬ ‫جدول‬ ‫مع‬ ‫استخدامه‬ ‫يتم‬ ‫الدقة‬ ‫متناهي‬ ‫ال‬ ‫حقيقي‬ ‫عدد‬ ‫على‬ ‫تعتمد‬ ‫األساس‬
‫كل‬،‫الملف‬ ‫في‬ ‫المحارف‬ ‫كل‬ ‫من‬ ‫المحرف‬ ‫هذا‬ ‫تكرار‬ ‫نسبة‬ ‫هو‬ ‫المجال‬ ‫هذا‬ ‫طول‬ ‫حيث‬ ‫لمحرف‬ ‫منها‬
‫هو‬ ‫المجاالت‬ ‫هذه‬ ‫مجموع‬ ‫وبالتالي‬1.‫والواحد‬ ‫الصفر‬ ‫بين‬ ‫محصور‬ ‫يكون‬ ‫المطلوب‬ ‫الحقيقي‬ ‫والعدد‬
‫يمكنها‬ ‫وال‬ ‫جدا‬ ‫محدودة‬ ‫الحقيقي‬ ‫المتحول‬ ‫دقة‬ ‫ألن‬ ‫الحاسب‬ ‫على‬ ‫تطبيقها‬ ‫يمكن‬ ‫وال‬ ‫نظرية‬ ‫الطريقة‬ ‫هذه‬
‫من‬ ‫أكثر‬ ‫ترميز‬11‫تقريبا‬ ‫بايت‬
‫والتعامل‬ ،‫نسبته‬ ‫وليس‬ ‫المجال‬ ‫في‬ ‫المحرف‬ ‫تكرار‬ ‫مرات‬ ‫عدد‬ ‫تخزين‬ ‫على‬ ‫تعتمد‬ ‫طريفة‬ ‫بالنهاية‬ ‫وجدنا‬
.‫طبيعية‬ ‫كأعداد‬ ‫معها‬
.‫حقيقيا‬ ‫وليس‬ ‫طبيعيا‬ ‫عدد‬ ‫أصبح‬ ‫بالملف‬ ‫االحتفاظ‬ ‫فعليا‬ ‫فيه‬ ‫يتم‬ ‫الذي‬ ‫العدد‬ ‫وبالتالي‬
‫التي‬ ‫الطريقة‬ ‫بسيط‬ ‫بشكل‬ ‫بالتالي‬ ‫وتختلف‬‫على‬ ‫فيها‬ ‫نحصل‬ ‫التي‬ ‫الطريقة‬ ‫أي‬ ،‫محرف‬ ‫كل‬ ‫ترميز‬ ‫فيها‬ ‫يتم‬
.‫الترميز‬ ‫عدد‬
:‫الترميز‬ ‫خوارزمية‬
:‫الترميز‬ ‫فك‬ ‫خوارزمية‬
while there are still symbols to encode
range = high- low + 1
high = low + ((range × high of symbol) / symbol count) - 1
low = low + (range × low of symbol) / symbol count
end while
while string is not fully decoded
range = high - low + 1
encoded value = (encoded value − low) + 1;
encoded value = (encoded value × symbol count) ÷ range
Get symbol in the current range
range = high of symbol - low of symbol + 1
high = low + ((range × high of symbol) / symbol count) - 1
low = low + (range × low of symbol) / symbol count
end while
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫بنية‬‫المشروع‬(‫الخوارزميات‬‫اإلضافية‬ ) 18
‫مشاكل‬‫الخوارزمية‬
‫على‬ ‫نرمز‬ ‫كنا‬ ‫إذا‬n bits‫مرم‬ ‫المحرف‬ ‫تكرار‬ ‫تعداد‬ ‫تحوي‬ ‫التي‬ ‫المجاالت‬ ‫حدود‬ ‫تكون‬ ‫أن‬ ‫فيجب‬‫على‬ ‫زة‬
n-2 bits
‫أهمية‬ ‫األكثر‬ ‫البت‬ ‫تساوي‬ ‫حال‬ ‫في‬MSB‫المتحولين‬ ‫في‬high, low‫لبتات‬ ‫لليسار‬ ‫إزاحة‬ ‫عمل‬ ‫يجب‬
‫المتحولين‬
1‫المشروع‬ ‫بنية‬)‫اإلضافية‬ ‫(الخوارزميات‬
‫الـ‬ ‫خوارزميات‬ ‫بنية‬RLE
‫القواميس‬ ‫خوارزميات‬ ‫بنية‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫بنية‬‫المشروع‬(‫الخوارزميات‬‫اإلضافية‬ ) 19
‫خوارزمية‬ ‫بنية‬Arithmetic
‫المساعدة‬ ‫البنى‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫واجهة‬‫المستخدم‬ 20
3‫واجهة‬‫المستخدم‬
3.1‫ة‬ّ‫ي‬‫األساس‬ ‫ة‬ّ‫ي‬‫الخوارزم‬
‫التنفيذي‬ ‫البرنامج‬ ‫نفس‬ ‫على‬ ‫العمل‬ ‫يكون‬ !‫فقط‬ ‫واحد‬ ‫اختيار‬ ‫ومربع‬ ‫زرين‬ ‫على‬ ‫تحوي‬ ،‫ّة‬‫ي‬‫وعمل‬ ‫ّا‬‫د‬‫ج‬ ‫بسيطة‬ ‫األساسي‬ ‫البرنامج‬ ‫واجهة‬
‫واختيار‬ ‫مختلفين‬ ‫مكانين‬ ‫في‬ ‫بنسخه‬Server.‫اآلخر‬ ‫دون‬ ‫ألحدهما‬
‫الـ‬ ‫عبر‬ ّ‫م‬‫يت‬ ‫صال‬ّ‫ت‬‫اال‬ ‫زر‬Server‫الـ‬ ّ‫م‬‫ث‬ ‫أوال‬Client‫ونالحظ‬ !‫فقط‬ ‫الوسائط‬ ‫لملفات‬ ‫العرض‬ ‫لكن‬ ،‫ممكنة‬ ‫ملف‬ ‫ألي‬ ‫اإلرسال‬ ‫ّة‬‫ي‬‫وعمل‬ ،
‫ال‬ ‫يستقبل‬ ‫أن‬ ‫قبل‬ ‫ملف‬ ‫أي‬ ‫عرض‬ ‫يمكن‬ ‫ال‬ ‫ه‬ّ‫ن‬‫أ‬ ‫هنا‬Client‫(ال‬ ‫المرسل‬ ‫من‬ ‫الطرود‬Server.)
3.1‫اإلضافية‬ ‫الخوارزميات‬
‫المشروع‬ ‫يوفر‬‫مع‬ ‫التشغيل‬ ‫وقت‬ ‫أثناء‬ ‫يريد‬ ‫ما‬ ‫إجراء‬ ‫للمستخدم‬ ‫تتيح‬ ‫مرنة‬ ‫تفاعل‬ ‫واجهة‬‫مقارنة‬
.‫منها‬ ‫لكل‬ ‫الضغط‬ ‫وفك‬ ‫الضغط‬ ‫وزمن‬ ‫ونسبة‬ ‫بينها‬ ‫فيما‬ ‫الخوارزميات‬
‫معا‬ ‫خوارزمية‬ ‫من‬ ‫أكثر‬ ‫تجربة‬ ‫إتاحة‬ :‫الصورة‬ ‫معالجة‬ ‫نافذة‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫واجهة‬‫المستخدم‬ 21
‫خوارزمية‬ ‫كل‬ ‫ضغط‬ ‫معلومات‬ ‫إظهار‬
‫النصوص‬ ‫معالجة‬ ‫نافذة‬
April 28, 2012 [LOSSLESS COMPRESSION ENGINE]
‫واجهة‬‫المستخدم‬ 22
‫كسابقتها‬ ‫وتتيح‬‫و‬ ‫ملف‬ ‫من‬ ‫أو‬ ‫فورا‬ ‫نص‬ ‫إضافة‬‫وفك‬ ‫الضغط‬ ‫عملية‬ ‫عن‬ ‫معلومات‬ ‫إظهار‬‫والزمن‬ ‫الضغط‬
.‫إلخ‬ .. ‫الضغظ‬ ‫ونسبة‬ ‫منهما‬ ‫كل‬ ‫في‬ ‫المنقضي‬

Contenu connexe

Similaire à Adaptive Huffman and Lossless Compression Techniques - Documentation

خطة اختبار لنظام المودل للتعليم الالكتروني
خطة اختبار لنظام المودل للتعليم الالكترونيخطة اختبار لنظام المودل للتعليم الالكتروني
خطة اختبار لنظام المودل للتعليم الالكترونيShadi Akil
 
الدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيسالدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيسAml Sindi
 
دورة صيانة مختصر
دورة صيانة مختصردورة صيانة مختصر
دورة صيانة مختصرYounes Almansoob
 
دليل البرمجة باستخدام Dynamo DB للمبتدئين
دليل البرمجة باستخدام Dynamo DB للمبتدئيندليل البرمجة باستخدام Dynamo DB للمبتدئين
دليل البرمجة باستخدام Dynamo DB للمبتدئينIsmaeel Enjreny
 
الصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخلية
الصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخليةالصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخلية
الصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخليةmoaa alaassr
 
حل مشاكل البطئ و التهنيج و الريستارت المتكرر
حل مشاكل البطئ و التهنيج و الريستارت المتكررحل مشاكل البطئ و التهنيج و الريستارت المتكرر
حل مشاكل البطئ و التهنيج و الريستارت المتكررhakmhamdy
 
Raspberrypi احترف راسبيري باي القرية الهندسية
 Raspberrypi  احترف راسبيري باي القرية الهندسية Raspberrypi  احترف راسبيري باي القرية الهندسية
Raspberrypi احترف راسبيري باي القرية الهندسيةAbdalwahab Noureldien
 
اهم ماكتب محمد ابوسامرة
اهم ماكتب محمد ابوسامرةاهم ماكتب محمد ابوسامرة
اهم ماكتب محمد ابوسامرةMahgoub Mergani
 
Using Ubuntu Linux as environment for the development of sites using php
Using Ubuntu Linux as environment for the development of sites using phpUsing Ubuntu Linux as environment for the development of sites using php
Using Ubuntu Linux as environment for the development of sites using phpObieda Ananbeh
 
خطوات دخول دراسة المحتوى التعليم
خطوات دخول دراسة المحتوى التعليمخطوات دخول دراسة المحتوى التعليم
خطوات دخول دراسة المحتوى التعليمعبدالله المسلم
 
مقدمة في استخدام الحاسب الآلي
مقدمة في استخدام الحاسب الآليمقدمة في استخدام الحاسب الآلي
مقدمة في استخدام الحاسب الآليkarima111
 
Adjust your srt file
 Adjust your srt file Adjust your srt file
Adjust your srt fileSalma Anwar
 

Similaire à Adaptive Huffman and Lossless Compression Techniques - Documentation (20)

برنامج إدارة المطاعم - اذواق
برنامج إدارة المطاعم - اذواقبرنامج إدارة المطاعم - اذواق
برنامج إدارة المطاعم - اذواق
 
خطة اختبار لنظام المودل للتعليم الالكتروني
خطة اختبار لنظام المودل للتعليم الالكترونيخطة اختبار لنظام المودل للتعليم الالكتروني
خطة اختبار لنظام المودل للتعليم الالكتروني
 
Dspace الدليل العملي لتنصيب
Dspace الدليل العملي لتنصيبDspace الدليل العملي لتنصيب
Dspace الدليل العملي لتنصيب
 
الدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيسالدليل العلمي لنظام الدي سبيس
الدليل العلمي لنظام الدي سبيس
 
تعريب برامج + العاب
تعريب برامج + العابتعريب برامج + العاب
تعريب برامج + العاب
 
Processor
ProcessorProcessor
Processor
 
Www.kutub.info 16076
Www.kutub.info 16076Www.kutub.info 16076
Www.kutub.info 16076
 
دورة صيانة مختصر
دورة صيانة مختصردورة صيانة مختصر
دورة صيانة مختصر
 
Processor
ProcessorProcessor
Processor
 
Processor
ProcessorProcessor
Processor
 
دليل البرمجة باستخدام Dynamo DB للمبتدئين
دليل البرمجة باستخدام Dynamo DB للمبتدئيندليل البرمجة باستخدام Dynamo DB للمبتدئين
دليل البرمجة باستخدام Dynamo DB للمبتدئين
 
الصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخلية
الصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخليةالصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخلية
الصف العاشر-الذاكرة-الرئيسية-ومكونات-جهاز-الحاسوب-الداخلية
 
حل مشاكل البطئ و التهنيج و الريستارت المتكرر
حل مشاكل البطئ و التهنيج و الريستارت المتكررحل مشاكل البطئ و التهنيج و الريستارت المتكرر
حل مشاكل البطئ و التهنيج و الريستارت المتكرر
 
Raspberrypi احترف راسبيري باي القرية الهندسية
 Raspberrypi  احترف راسبيري باي القرية الهندسية Raspberrypi  احترف راسبيري باي القرية الهندسية
Raspberrypi احترف راسبيري باي القرية الهندسية
 
اهم ماكتب محمد ابوسامرة
اهم ماكتب محمد ابوسامرةاهم ماكتب محمد ابوسامرة
اهم ماكتب محمد ابوسامرة
 
Using Ubuntu Linux as environment for the development of sites using php
Using Ubuntu Linux as environment for the development of sites using phpUsing Ubuntu Linux as environment for the development of sites using php
Using Ubuntu Linux as environment for the development of sites using php
 
خطوات دخول دراسة المحتوى التعليم
خطوات دخول دراسة المحتوى التعليمخطوات دخول دراسة المحتوى التعليم
خطوات دخول دراسة المحتوى التعليم
 
مقدمة في استخدام الحاسب الآلي
مقدمة في استخدام الحاسب الآليمقدمة في استخدام الحاسب الآلي
مقدمة في استخدام الحاسب الآلي
 
Nxt 2.0 programming
Nxt 2.0 programmingNxt 2.0 programming
Nxt 2.0 programming
 
Adjust your srt file
 Adjust your srt file Adjust your srt file
Adjust your srt file
 

Plus de Mohammad Shaker

12 Rules You Should to Know as a Syrian Graduate
12 Rules You Should to Know as a Syrian Graduate12 Rules You Should to Know as a Syrian Graduate
12 Rules You Should to Know as a Syrian GraduateMohammad Shaker
 
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]Mohammad Shaker
 
Interaction Design L06 - Tricks with Psychology
Interaction Design L06 - Tricks with PsychologyInteraction Design L06 - Tricks with Psychology
Interaction Design L06 - Tricks with PsychologyMohammad Shaker
 
Short, Matters, Love - Passioneers Event 2015
Short, Matters, Love -  Passioneers Event 2015Short, Matters, Love -  Passioneers Event 2015
Short, Matters, Love - Passioneers Event 2015Mohammad Shaker
 
Unity L01 - Game Development
Unity L01 - Game DevelopmentUnity L01 - Game Development
Unity L01 - Game DevelopmentMohammad Shaker
 
Android L07 - Touch, Screen and Wearables
Android L07 - Touch, Screen and WearablesAndroid L07 - Touch, Screen and Wearables
Android L07 - Touch, Screen and WearablesMohammad Shaker
 
Interaction Design L03 - Color
Interaction Design L03 - ColorInteraction Design L03 - Color
Interaction Design L03 - ColorMohammad Shaker
 
Interaction Design L05 - Typography
Interaction Design L05 - TypographyInteraction Design L05 - Typography
Interaction Design L05 - TypographyMohammad Shaker
 
Interaction Design L04 - Materialise and Coupling
Interaction Design L04 - Materialise and CouplingInteraction Design L04 - Materialise and Coupling
Interaction Design L04 - Materialise and CouplingMohammad Shaker
 
Android L04 - Notifications and Threading
Android L04 - Notifications and ThreadingAndroid L04 - Notifications and Threading
Android L04 - Notifications and ThreadingMohammad Shaker
 
Android L09 - Windows Phone and iOS
Android L09 - Windows Phone and iOSAndroid L09 - Windows Phone and iOS
Android L09 - Windows Phone and iOSMohammad Shaker
 
Interaction Design L01 - Mobile Constraints
Interaction Design L01 - Mobile ConstraintsInteraction Design L01 - Mobile Constraints
Interaction Design L01 - Mobile ConstraintsMohammad Shaker
 
Interaction Design L02 - Pragnanz and Grids
Interaction Design L02 - Pragnanz and GridsInteraction Design L02 - Pragnanz and Grids
Interaction Design L02 - Pragnanz and GridsMohammad Shaker
 
Android L10 - Stores and Gaming
Android L10 - Stores and GamingAndroid L10 - Stores and Gaming
Android L10 - Stores and GamingMohammad Shaker
 
Android L06 - Cloud / Parse
Android L06 - Cloud / ParseAndroid L06 - Cloud / Parse
Android L06 - Cloud / ParseMohammad Shaker
 
Android L08 - Google Maps and Utilities
Android L08 - Google Maps and UtilitiesAndroid L08 - Google Maps and Utilities
Android L08 - Google Maps and UtilitiesMohammad Shaker
 
Android L03 - Styles and Themes
Android L03 - Styles and Themes Android L03 - Styles and Themes
Android L03 - Styles and Themes Mohammad Shaker
 
Android L02 - Activities and Adapters
Android L02 - Activities and AdaptersAndroid L02 - Activities and Adapters
Android L02 - Activities and AdaptersMohammad Shaker
 

Plus de Mohammad Shaker (20)

12 Rules You Should to Know as a Syrian Graduate
12 Rules You Should to Know as a Syrian Graduate12 Rules You Should to Know as a Syrian Graduate
12 Rules You Should to Know as a Syrian Graduate
 
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]
 
Interaction Design L06 - Tricks with Psychology
Interaction Design L06 - Tricks with PsychologyInteraction Design L06 - Tricks with Psychology
Interaction Design L06 - Tricks with Psychology
 
Short, Matters, Love - Passioneers Event 2015
Short, Matters, Love -  Passioneers Event 2015Short, Matters, Love -  Passioneers Event 2015
Short, Matters, Love - Passioneers Event 2015
 
Unity L01 - Game Development
Unity L01 - Game DevelopmentUnity L01 - Game Development
Unity L01 - Game Development
 
Android L07 - Touch, Screen and Wearables
Android L07 - Touch, Screen and WearablesAndroid L07 - Touch, Screen and Wearables
Android L07 - Touch, Screen and Wearables
 
Interaction Design L03 - Color
Interaction Design L03 - ColorInteraction Design L03 - Color
Interaction Design L03 - Color
 
Interaction Design L05 - Typography
Interaction Design L05 - TypographyInteraction Design L05 - Typography
Interaction Design L05 - Typography
 
Interaction Design L04 - Materialise and Coupling
Interaction Design L04 - Materialise and CouplingInteraction Design L04 - Materialise and Coupling
Interaction Design L04 - Materialise and Coupling
 
Android L05 - Storage
Android L05 - StorageAndroid L05 - Storage
Android L05 - Storage
 
Android L04 - Notifications and Threading
Android L04 - Notifications and ThreadingAndroid L04 - Notifications and Threading
Android L04 - Notifications and Threading
 
Android L09 - Windows Phone and iOS
Android L09 - Windows Phone and iOSAndroid L09 - Windows Phone and iOS
Android L09 - Windows Phone and iOS
 
Interaction Design L01 - Mobile Constraints
Interaction Design L01 - Mobile ConstraintsInteraction Design L01 - Mobile Constraints
Interaction Design L01 - Mobile Constraints
 
Interaction Design L02 - Pragnanz and Grids
Interaction Design L02 - Pragnanz and GridsInteraction Design L02 - Pragnanz and Grids
Interaction Design L02 - Pragnanz and Grids
 
Android L10 - Stores and Gaming
Android L10 - Stores and GamingAndroid L10 - Stores and Gaming
Android L10 - Stores and Gaming
 
Android L06 - Cloud / Parse
Android L06 - Cloud / ParseAndroid L06 - Cloud / Parse
Android L06 - Cloud / Parse
 
Android L08 - Google Maps and Utilities
Android L08 - Google Maps and UtilitiesAndroid L08 - Google Maps and Utilities
Android L08 - Google Maps and Utilities
 
Android L03 - Styles and Themes
Android L03 - Styles and Themes Android L03 - Styles and Themes
Android L03 - Styles and Themes
 
Android L02 - Activities and Adapters
Android L02 - Activities and AdaptersAndroid L02 - Activities and Adapters
Android L02 - Activities and Adapters
 
Android L01 - Warm Up
Android L01 - Warm UpAndroid L01 - Warm Up
Android L01 - Warm Up
 

Adaptive Huffman and Lossless Compression Techniques - Documentation

  • 1. 4/28/2012 MULTIMEDIA ASSIGNMENT #2 | JAEGER & ZGTR & HASSNOV & POD ‫اهلل‬ ‫عبد‬ ‫أبو‬ ‫إسماعيل‬‫شاكر‬ ‫محمد‬ ‫سرحان‬ ‫حسه‬ ‫محمد‬‫زوجي‬ ‫مهدي‬ ‫الصوص‬ ‫مدحت‬ 2102 LOSSLESS COMPRESSION ENGINE
  • 2. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫خوارزمية‬ Adaptive Hoffman 1 Contents 1‫خوارزمية‬Adaptive Hoffman...................................................................................................................3 1.1‫خطوات‬‫العمل‬....................................................................................................................................3 1.1.1‫البحث‬.....................................................................................................................................3 1.1.1‫التعامل‬‫مع‬‫ناتج‬‫البحث‬....................................................................................................................3 1.1.3‫تحديث‬‫الشجرة‬..............................................................................................................................3 1.1.1‫إعادة‬‫الرمز‬‫المناسب‬......................................................................................................................3 1.1‫التحسينات‬‫على‬‫ّة‬‫ي‬‫الخوارزم‬.....................................................................................................................3 1.3‫تابع‬‫البحث‬........................................................................................................................................3 2‫عرض‬‫الفيديو‬‫اثناء‬‫فك‬‫الضغط‬.......................................................................................................1 1.1‫كيفية‬‫استخدام‬VLC Player:................................................................................................................5 3‫الخوارزميات‬‫اإلضافية‬..................................................................................................................6 ‫مالحظة‬..................................................................................................................................................6 3.1‫خوارزمية‬RLE‫الرئيسة‬(RLEBasic)......................................................................................................7 3.1.1‫خورازمية‬‫الضغط‬........................................................................................................................7 3.1.2‫خوارزمية‬‫فك‬‫الضغط‬....................................................................................................8 3.1‫خوارزمية‬Method1RLE...................................................................................................................9 3.2.1‫خوارزمية‬‫الضغط‬.....................................................................................................................9 3.2.2‫خوارزمية‬‫فك‬‫الضغط‬...............................................................................................................11 3.3‫خوارزمية‬Method2RLE.................................................................................................................11 3.3.1‫خوارزمية‬‫الضغط‬.......................................................................................................11 3.3.2‫خوارزمية‬‫فك‬‫الضغط‬..................................................................................................................11 3.1‫خوارزمية‬QuadTreeRLE................................................................................................................11 3.4.1‫خوارزمية‬‫الضغط‬.......................................................................................................................11 3.4.2‫خوارزمية‬‫فك‬‫الضغط‬..................................................................................................................13 3.5‫الخوارزميات‬‫المعتمدة‬‫على‬‫القواميس‬‫المتغيرة‬‫بشكل‬‫ديناميكي‬Adaptive Dictionary.......................................13 3.5.1‫خوارزمية‬LZ77........................................................................................................................13 ‫النافذة‬Window....................................................................................................................................13 ‫المكان‬‫المحجوز‬‫قدما‬Buffer.....................................................................................................................11 ‫بنية‬‫المعطيات‬Buffer..............................................................................................................................11 3.5.1‫خوارزمية‬LZW........................................................................................................................15 3.6‫خوارزمية‬Arithmetic coding.........................................................................................................17 1‫بنية‬‫المشروع‬(‫الخوارزميات‬‫اإلضافية‬).........................................................................................................18
  • 3. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫خوارزمية‬ Adaptive Hoffman 2 5‫واجهة‬‫المستخدم‬)‫جميعها‬ ‫ّات‬‫ي‬‫(الخوارزم‬......................................................................................................11
  • 4. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫خوارزمية‬ Adaptive Hoffman 3 1‫خوارزمية‬Adaptive Hoffman ‫ّة‬‫ي‬‫خوارزم‬ ‫في‬ ‫التشفير‬ ‫وفك‬ ‫التشفير‬Adaptive Huffman‫في‬ ‫وتشتركان‬ ،‫ا‬ّ‫د‬‫ج‬ ‫كبير‬ ‫لحد‬ ‫متشابهان‬ ‫عام‬ ‫بشكل‬ ‫ّتين‬‫ي‬‫الخوارزم‬ ‫شرح‬ ‫في‬ ‫الخطوات‬ ‫هذه‬ ‫تظهر‬ .‫عديدة‬ ‫خطوات‬ 1.1‫العمل‬ ‫خطوات‬ ‫الخطوات‬–‫سابقا‬ ‫ذكرنا‬ ‫كما‬-‫ال‬ ‫وهذه‬ ،‫التشفير‬ ‫وفك‬ ‫التشفير‬ ‫بين‬ ‫العام‬ ‫بالشكل‬ ‫متطابقة‬:‫هي‬ ‫خطوات‬ 1.1.1‫البحث‬ ‫المدخل‬ ‫الرمز‬ ‫عن‬ ‫البحث‬ ‫بتات‬ ‫تتابع‬ ‫فيكون‬ ‫التشفير‬ ‫فك‬ ‫حال‬ ‫في‬ ‫أما‬ ،‫بايت‬ ‫هو‬ ‫الرمز‬ ‫هذا‬ ‫يكون‬ ‫التشفير‬ ‫حال‬ ‫في‬ 1.1.1‫البحث‬ ‫ناتج‬ ‫مع‬ ‫التعامل‬ ‫عدد‬ ‫زيادة‬ ّ‫م‬‫ويت‬ ‫للبايت‬ ‫جديد‬ ‫ورود‬ ‫أنه‬ ‫على‬ ‫التعامل‬ ّ‫م‬‫يت‬ ،‫سابقا‬ ‫موجودة‬ ‫لعقدة‬ ‫الوصول‬ ّ‫م‬‫ت‬ ‫حال‬ ‫في‬ ‫بمقدار‬ ‫تكراره‬ ‫مرات‬1‫أما‬ ،‫التشفير‬ ‫حال‬ ‫في‬ ‫المطلوب‬ ‫البايت‬ ‫نوجد‬ ‫(لم‬ ‫مسدود‬ ‫لخط‬ ‫الوصول‬ ّ‫م‬‫ت‬ ‫حال‬ ‫في‬ ‫والعقدة‬New.‫جديدة‬ ‫عقدة‬ ‫إضافة‬ ّ‫م‬‫فيت‬ )‫التشفير‬ ‫فك‬ ‫حال‬ ‫في‬ 1.1.1‫الشجرة‬ ‫تحديث‬ ( ‫صالحة‬ ‫شجرة‬ ‫تبقى‬ ‫لكي‬ ‫الشجرة‬ ‫بتحديق‬ ‫القيام‬ ‫الضروري‬ ‫من‬Huffman Treeّ‫المرجو‬ ‫ق‬ّ‫ق‬‫وتح‬ ) ‫الحال‬ ‫في‬ ‫الشجرة‬ ‫وتحديث‬ ،‫ّة‬‫ي‬‫الخوارزم‬ ‫من‬)‫حديثا‬ ‫المضافة‬ ‫(أو‬ ‫أخيرا‬ ‫ثة‬ّ‫د‬‫المح‬ ‫العقدة‬ ‫من‬ ‫يبدأ‬ ،‫واحد‬ ‫تين‬ .‫الشجرة‬ ‫لجذر‬ ‫ليصل‬ ‫ويصعد‬ 1.1.1‫المناسب‬ ‫الرمز‬ ‫إعادة‬ ‫بايت‬ ‫فيكون‬ ‫التشفير‬ ‫فك‬ ‫حالة‬ ‫في‬ ‫أما‬ ،)‫بتات‬ ‫(تتالي‬ ‫أكثر‬ ‫أو‬ ‫بايت‬ ‫أو‬ ‫بت‬ ‫نرد‬ ‫قد‬ ‫التشفير‬ ‫حال‬ ‫في‬ .‫العامة‬ ‫بالحالة‬ 1.1‫ة‬ّ‫ي‬‫الخوارزم‬ ‫على‬ ‫التحسينات‬ ‫تعمل‬ ‫ّة‬‫ي‬‫الخوارزم‬ ‫إن‬‫ال‬ ‫قد‬ ‫التحسينات‬ ‫أو‬ ‫التعديالت‬ ‫بعض‬ ‫وإن‬ ،‫عليها‬ ‫تعديل‬ ‫أي‬ ‫دون‬ ‫بطيء‬ ‫بشكل‬ .‫ملحوظ‬ ‫بشكل‬ ‫سرعتها‬ ‫ترفع‬ ‫ها‬ّ‫ن‬‫لك‬ ‫ا‬ّ‫د‬‫ج‬ ‫سريعة‬ ‫ّة‬‫ي‬‫الخوارزم‬ ‫تجعل‬ 1.1‫البحث‬ ‫تابع‬ ،‫ّن‬‫ي‬‫مع‬ ‫بايت‬ ‫قيمة‬ ‫تحمل‬ ‫التي‬ ‫العقدة‬ ‫عن‬ ‫ها‬ّ‫ل‬‫ك‬ ‫الشجرة‬ ‫في‬ ‫يبحث‬ ‫التشفير‬ ‫مرحلة‬ ‫في‬ ‫البحث‬ ‫تابع‬ ‫عناصره‬ ‫عدد‬ ‫يصل‬ ‫قد‬ ‫شجرة‬ ‫في‬ ‫وتبحث‬‫إلى‬ ‫ا‬511‫في‬ ‫للبحث‬ ‫تحتاج‬ ‫ّا‬‫ي‬‫عمل‬ ‫بينما‬ ‫عنصر‬156‫عقدة‬
  • 5. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] 4 .‫األلياف‬ ‫فقط‬ ‫بل‬ ،‫الواصلة‬ ‫العقد‬ ‫ّها‬‫م‬‫ته‬ ‫ال‬ ‫حيث‬ ،‫ّا‬‫ي‬‫عمل‬ ‫األكثر‬ ‫على‬ ( ‫لأللياف‬ ‫ّا‬‫ي‬‫نسب‬ ‫الصغير‬ ‫للعدد‬ ‫نظرا‬156‫قاموس‬ ‫في‬ ‫تخزينها‬ ‫فإن‬ )Dictionary‫كل‬ ‫كون‬ ‫ا‬ّ‫د‬‫ج‬ ‫عملي‬ ‫ع‬ ‫ّر‬‫ب‬‫يع‬ ‫الذي‬ ‫البات‬ ‫رقم‬ ‫ل‬ّ‫يمث‬ ‫ّز‬‫ي‬‫مم‬ ‫مفتاح‬ ‫له‬ ‫منها‬.‫نه‬ 1‫الضغط‬ ‫فك‬ ‫اثناء‬ ‫الفيديو‬ ‫عرض‬ ‫الـ‬ ‫قيام‬ ‫اثناء‬Decoder‫فك‬ ‫بعد‬ ‫البايتات‬ ‫بتخزين‬ ‫نقوم‬ ,‫الشبكة‬ ‫طريق‬ ‫عن‬ ‫اليه‬ ‫القادم‬ ‫الملف‬ ‫ضغط‬ ‫بفك‬ ‫بشكل‬ ‫الملف‬ ‫هذا‬ ‫محتويات‬ ‫بعرض‬ ‫نقوم‬ ‫الوقت‬ ‫نفس‬ ‫وفي‬ ,‫الصلب‬ ‫القرص‬ ‫على‬ ‫ملف‬ ‫في‬ ‫ضغطها‬ .‫متزامن‬ ‫الـ‬ ‫قدرة‬ ‫لعدم‬ ‫نظرا‬Components‫نت‬ ‫الـدوت‬ ‫بيئة‬ ‫في‬ ‫الموجودة‬-‫عموما‬ ‫الفيديو‬ ‫مشغالت‬ ‫او‬-‫على‬ ‫الـ‬ ‫مكاتب‬ ‫باستخدام‬ ‫قمنا‬ ‫فيه‬ ‫الكتابة‬ ‫اثناء‬ ‫فيديو‬ ‫ملف‬ ‫عرض‬VLC Player‫خوارزمية‬ ‫الى‬ ‫باالضافة‬ .‫الضغط‬ ‫فك‬ ‫مع‬ ‫متزامن‬ ‫بشكل‬ ‫محتواه‬ ‫وعرض‬ ‫الملف‬ ‫تشغيل‬ ‫من‬ ‫تمكنا‬ ‫بسيط‬ ‫م‬ ‫اسرع‬ ‫الفديو‬ ‫ملف‬ ‫قراءة‬ ‫سرعة‬ ‫بأن‬ ‫المشكلة‬ ‫تكمن‬‫الملف‬ ‫تشغيل‬ ‫فعند‬ .‫الكتابة‬ ‫و‬ ‫الضغط‬ ‫فك‬ ‫سرعة‬ ‫ن‬ ‫يرفض‬ ‫وقد‬ ,‫الملف‬ ‫بايتات‬ ‫تتمنة‬ ‫وجود‬ ‫لعدم‬ ‫وذلك‬ ,‫العرض‬ ‫بايقاف‬ ‫المشغل‬ ‫يقوم‬ ‫نهايته‬ ‫الى‬ ‫والوصول‬ .‫ترويسته‬ ‫اكتمال‬ ‫لعدم‬ ‫الملف‬ ‫تشغيل‬ ‫الـ‬ ‫مكاتب‬ ‫استخدام‬ ‫على‬ ‫يعتمد‬ ‫المتبع‬ ‫الحل‬VLC Player‫توقف‬ ‫وعند‬ ,‫الفيديو‬ ‫محتوى‬ ‫لعرض‬ ‫العرض(لل‬‫ثم‬ ,‫الفيديو‬ ‫ملف‬ ‫من‬ ‫جزء‬ ‫كتابة‬ ‫الكتمال‬ ‫معينة‬ ‫زمنية‬ ‫فترة‬ ‫بانتظار‬ ‫نقوم‬ )َ‫ا‬‫انف‬ ‫المذكور‬ ‫سبب‬ ‫الملف‬ ‫عرض‬ ‫نكمل‬ ‫وثم‬ ,‫قصيرة‬ ‫زمنية‬ ‫لفترة‬ ‫بالمحتوى‬ ‫العودة‬ ‫المشغل‬ ‫من‬ ‫نطلب‬ ‫مكاتب‬ ‫ان‬ ‫بما‬VLC Player‫الـ‬ ‫بلغة‬ ‫مكتوبة‬c++‫الـ‬ ‫هي‬ ‫عليها‬ ‫نعمل‬ ‫التي‬ ‫والبيئة‬dotnet‫فقمنا‬ ‫ط‬ ‫باستخدام‬‫الـ‬ ‫ريقة‬P/Invoke‫التالي‬ ‫بالشكل‬ ‫المكاتب‬ ‫هذا‬ ‫الستخدام‬ [DllImport("libvlc", CallingConvention = CallingConvention.Cdecl)] public static extern void libvlc_media_player_play(IntPtr player, ref libvlc_exception_t ex);
  • 6. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫عرض‬‫الفيديو‬‫اثناء‬‫فك‬‫الضغط‬ 5 ‫الـ‬ ‫يحدد‬ ‫حيث‬DllImport‫المفتاحية‬ ‫الكلمة‬ ‫تدل‬ .‫استعمالها‬ ‫نريد‬ ‫التي‬ ‫المكتبة‬ ‫اسم‬extern‫ان‬ ‫على‬ .‫خارجية‬ ‫مكتبة‬ ‫في‬ ‫معرف‬ ‫التالي‬ ‫التابع‬ ‫مالحظة‬‫المكتبة‬ ‫في‬ ‫المعرف‬ ‫التابع‬ ‫اسم‬ ‫هنا‬ ‫التابع‬ ‫اسم‬ ‫يوافق‬ ‫ان‬ ‫البد‬ : 1.1‫استخدام‬ ‫كيفية‬VLC Player: 1.‫بانشاء‬ ‫نقوم‬Instance‫الـ‬ ‫من‬VLC‫تابع‬ ‫باستخدام‬libvlc_new 1.‫بالـ‬ ‫يسمى‬ ‫ما‬ ‫ننشئ‬media‫باستخدام‬ ‫عرضه‬ ‫نود‬ ‫الذي‬ ‫الملف‬ ‫ويمثل‬libvlc_media_new 3.( ‫المشغل‬ ‫نعرف‬player‫التابع‬ ‫طريق‬ ‫عن‬ ‫السابق‬ ‫الميديا‬ ‫بعرض‬ ‫سيقوم‬ ‫والذي‬ ) libvlc_media_player_new_from_media 4.‫التابع‬ ‫باستخدام‬ ‫بالعرض‬ ‫البدء‬ ‫المشغل‬ ‫من‬ ‫نطلب‬libvlc_media_player_play ‫التالية‬ ‫التوابع‬ ‫طريق‬ ‫عن‬ ‫بالمشغل‬ ‫التحكم‬ ‫يمكن‬ Libvlc_media_player_stop:.‫العرض‬ ‫بايقاف‬ ‫يقوم‬ Libvlc_media_player_pause:.‫مؤقت‬ ‫بشكل‬ ‫العرض‬ ‫يوقف‬ Libvlc_media_player_get_position:‫الـ‬ ‫بين‬ ‫قيمة‬ ‫يرد‬[0,1]‫تم‬ ‫التي‬ ‫النسبة‬ ‫وتمثل‬ ‫الملف‬ ‫من‬ ‫عرضها‬ Libvlc_media_player_set_position:‫معينة‬ ‫نقطة‬ ‫من‬ ‫ابتداءا‬ ‫المحتوى‬ ‫بعرض‬ ‫يقوم‬ Libvlc_media_player_set_drawable:‫عليها‬ ‫الفديو‬ ‫عرض‬ ‫نود‬ ‫التي‬ ‫النافذة‬ ‫يحدد‬
  • 7. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 6 1‫اإلضافية‬ ‫الخوارزميات‬ ‫للضغط‬ ‫اإلضافية‬ ‫الخوارزميات‬ ‫من‬ ‫العديد‬ ‫بإضافة‬ ‫المشروع‬ ‫هذا‬ ‫في‬ ‫قمنا‬‫بالمعلومات‬ ‫المحتفظ‬ ‫هي‬ ‫كما‬(Lossless Compression)‫والنصوص‬ ‫الصور‬ ‫لضغط‬ ‫وذلك‬‫هنا‬ ‫سنذكرها‬. ‫مالحظة‬ ‫الضغط‬ ‫وفك‬ ‫(الضغط‬ ‫الخوارزميات‬ ‫توابع‬ ‫جميع‬Encode/Decode)‫توابع‬ ‫ضمن‬ ‫هي‬static ‫بـ‬ ‫متعلق‬ ‫غير‬ ‫الضغط‬ ‫وفك‬ ‫الضغط‬ ‫ألن‬ ‫وذلك‬stream‫مثال‬ ‫الضغط‬ ‫فك‬ ‫خوارزمية‬ ‫فعلى‬ ‫معينة‬ ‫لها‬ ‫المقابلة‬ ‫الضغط‬ ‫خوارزمية‬ ‫بنفس‬ ‫مضغوطة‬ ‫تكون‬ ‫أن‬ ‫شريطة‬ ‫تكن‬ ‫مهما‬ ‫المعطيات‬ ‫فك‬ ‫الـ‬ ‫بنية‬ ‫نفس‬ ‫لها‬ ‫وبالتالي‬stream.‫إطالقا‬ ‫بمحتواها‬ ‫العلم‬ ‫دون‬ ‫فقط‬
  • 8. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 7 1.1‫خوارزمية‬RLE( ‫الرئيسة‬RLEBasic) ،‫والصور‬ ‫للنصوص‬ ‫خوارزمية‬ ‫وهو‬‫عدد‬ ‫حفظ‬ ‫على‬ ‫تعتمد‬‫وإضافته‬ ‫المحرف‬ ‫مرور‬ ‫تكرار‬ ‫مع‬ ‫المضغوطة‬ ‫للسلسلة‬8‫إتمام‬ ‫كل‬ ‫مع‬ ‫تضاف‬ ‫أصفار‬8.‫ضغوطات‬ ‫الـ‬ ‫خوارزميات‬ ‫جميع‬ ‫في‬ ‫نستخدم‬RLE‫البنية‬DataUnit:‫التكرارات‬ ‫لحفظ‬ 1.1.1‫خورازمية‬‫الضغط‬ private static Stream EncodeStream(Stream streamOfIds) { Stream compressedStream; Stream miniCompressedStream; flagStr = ("00000000"); int counterFlag = 0; for (int i = 0; i < streamOfIds.Count; i++) { counterFlag++; if (ShouldInsertFlag(counterFlag)) { compressedStream.AddRange(flagStr); compressedStream.AddRange(miniCompressedStream); counterFlag = 1; flagStr = ("00000000"); } DataUnit dataUnit = CatchNextTokenEncode(streamOfIds, i); if (dataUnit.RepeatCounter > 1) { miniCompressedStream.Add(dataUnit.RepeatCounter); flagStr[counterFlag] = '1'; i += dataUnit.RepeatCounter - 1; } miniCompressedStream.Add(dataUnit.Id); } return compressedStream; } DataUnit { byte Id; int RepeatCounter; }
  • 9. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 8 1.1.1‫الضغط‬ ‫فك‬ ‫خوارزمية‬ private static Stream Decode (Stream OfIds) { Stream original; string currentFlagStr = “”; int counterFlag = 0; for (int i = 0; i < OfIds.Count; i++) { if (ShouldRetrieveFlag(counterFlag)) { currentFlagStr = GetString(OfIds, i, 8); counterFlag = 8; i += 7; } else { Stream nextTokenList = CatchNextTokenDecode(OfIds, i, currentFlagStr[8-ounterFlag]); original.AddRange(nextTokenList); if (nextTokenList.Count > 2) { i++; } } counterFlag--; } return original; }
  • 10. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 9 1.1‫خوارزمية‬Method1RLE ‫بتجميع‬ ‫تقوم‬ ‫حيث‬ ‫الصورة‬ ‫في‬ ‫المعلومات‬ ‫تكرار‬ ‫على‬ ‫تعتمد‬ ‫ألنها‬ ‫وذلك‬ ،‫فقط‬ ‫للصور‬ ‫خوارزمية‬ ‫وهي‬ ‫ضمن‬ ‫حدا‬ ‫على‬ ‫سطر‬ ‫كل‬ ‫معلومات‬DataUnits 1.1.1‫الضغط‬ ‫خوارزمية‬ :‫التالية‬ ‫الخوارزمية‬ ‫على‬ ‫الضغط‬ ‫معلومات‬ ‫تجميع‬ ‫يعتمد‬ public static List<List<DataUnit>> EncodeImage(Bitmap imageToEncode, ref CompressionDataInfo info) { TimeChecker timeChecker = new TimeChecker(); timeChecker.S1(); List<List<DataUnit>> compressedStream = new List<List<DataUnit>>(); List<List<Color>> colorArr = ImageManipulator.GetBitmapList(imageToEncode); for (int i = 0; i < colorArr.Count; i++) { Stream currentRow = colorArr[i].Select(color => color.ToArgb().ToString()).ToList(); List<DataUnit> currentRowTokens = TokenizeRow(currentRow); compressedStream.Add(currentRowTokens); } info.EncodingStreamCount = compressedStream.Count; info.TimeEncoding = timeChecker.S2(); return compressedStream; } private static List<DataUnit> TokenizeRow(Stream currentRow) { List<DataUnit> listToReturn = new List<DataUnit>(); for (int i = 0; i < currentRow.Count; i++) { DataUnit dataUnit = RLEBasic.CatchNextTokenEncode(currentRow, i); listToReturn.Add(dataUnit); if (dataUnit.RepeatCounter > 1) { i += dataUnit.RepeatCounter - 1; } } return listToReturn; }
  • 11. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 10 1.1.1‫الضغط‬ ‫فك‬ ‫خوارزمية‬ ‫المعطيات‬ ‫بنى‬ ‫فك‬ ‫على‬ ‫تعتمد‬ ‫بسيطة‬DataUnits‫جديد‬ ‫من‬ ‫الصورة‬ ‫بناء‬ ‫وإعادة‬ ‫سطر‬ ‫كل‬ ‫في‬ 1.1‫خوارزمية‬Method2RLE ‫فقط‬ ‫للصور‬ ‫خوارزمية‬ ‫وهي‬‫تقوم‬ ‫حيث‬ ‫الصورة‬ ‫في‬ ‫المعلومات‬ ‫تكرار‬ ‫على‬ ‫تعتمد‬ ‫ألنها‬ ‫وذلك‬ ،‫كالسابقة‬ ‫ضمن‬ ‫حدا‬ ‫على‬ ‫سطر‬ ‫كل‬ ‫معلومات‬ ‫بتجميع‬DataUnits‫مشابهة‬‫ما‬ ‫نوعا‬‫لـ‬RLE Method1‫ولكنها‬ ‫بالـ‬ ‫التالي‬ ‫بالسطر‬ ‫والبداية‬ ‫بالسطور‬ ‫اإلحاطة‬ ‫على‬ ‫تعتمد‬index‫وبالتالي‬ ‫الحالي‬ ‫السطر‬ ‫لبداية‬ ‫المعاكس‬ ‫تج‬ ‫محاولة‬‫من‬ ‫أكبر‬ ‫عدد‬ ‫ميع‬.‫المتشابهة‬ ‫األلوان‬ ‫أنها‬ ‫على‬ ‫كاملة‬ ‫الصورة‬ ‫مع‬ ‫وإنما‬ ‫حدا‬ ‫على‬ ‫األسطر‬ ‫مع‬ ‫نتعامل‬ ‫نعد‬ ‫لم‬ ‫هنا‬ ‫أننا‬ ‫نستنتج‬ ‫أننا‬ ‫سبق‬ ‫مما‬ Stream‫عن‬ ‫تماما‬ ‫الضغط‬ ‫وفك‬ ‫الضغط‬ ‫في‬ ‫تختلف‬ ‫وبالتالي‬ ‫نهايتها‬ ‫حتى‬ ‫الصورة‬ ‫بداية‬ ‫من‬ ‫واحد‬ .‫سابقتها‬ 1.1.1‫الضغط‬ ‫خوارزمية‬ ‫بالسطور‬ ‫اإلحاطة‬ ‫على‬ ‫(تعتمد‬ ‫السابق‬ ‫الكالم‬ ‫مع‬ ‫المتفقة‬ ‫السلسلة‬ ‫بتوليد‬ ‫التالية‬ ‫الخوارزمية‬ ‫تقوم‬ ‫حيث‬ ‫بالـ‬ ‫التالي‬ ‫بالسطر‬ ‫والبداية‬index‫من‬ ‫أكبر‬ ‫عدد‬ ‫تجميع‬ ‫محاولة‬ ‫وبالتالي‬ ‫الحالي‬ ‫السطر‬ ‫لبداية‬ ‫المعاكس‬ ‫المتشابهة‬ ‫األلوان‬Wrapping around lines) public static List<DataUnit> EncodeImage(Bitmap imageToEncode, ref CompressionDataInfo info) { TimeChecker timeChecker = new TimeChecker(); timeChecker.S1(); List<DataUnit> compressedStream = new List<DataUnit>(); List<Color> colorArr = RLEMethod2.WrapDataUnitsAroundCorners(ImageManipulator.GetBitmapList(imageToEncode)); List<string> currentRow = colorArr.Select(color => color.ToArgb().ToString()).ToList(); List<DataUnit> currentRowTokens = TokenizeRow(currentRow); compressedStream.AddRange(currentRowTokens); info.EncodingStreamCount = compressedStream.Count; info.TimeEncoding = timeChecker.S2(); return compressedStream; }
  • 12. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 11 1.1.1‫خوارزمية‬‫فك‬‫الضغط‬ ‫عن‬ ‫عبارة‬ ‫ألنها‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫كامل‬ ‫سطر‬ ‫تجميع‬ ‫فحص‬ ‫مع‬ ‫المعطيات‬ ‫بنى‬ ‫ضغط‬ ‫فك‬ ‫على‬ ‫تعتمد‬ DataUnitStream‫فقط‬ ‫وإنما‬ ‫األسطر‬ ‫على‬ ‫داللة‬ ‫يوجد‬ ‫ال‬ ‫وبالتالي‬Stream‫من‬ ‫الصورة‬ ‫بناء‬ ‫ثم‬ ‫ومن‬ ‫الضغط‬ ‫لفاكك‬ ‫الصورة‬ ‫أبعاد‬ ‫تمرير‬ ‫ضرورة‬ ‫هنا‬ ‫(الحظ‬ .‫جديد‬Decoder‫وتجميع‬ ‫الضغط‬ ‫بفك‬ ‫ليقوم‬ .)‫وعرضها‬ ‫الصورة‬ ‫طول‬ ‫أساس‬ ‫على‬ ‫الصورة‬ ‫أسطر‬ 1.1‫خوارزمية‬QuadTreeRLE ‫لون‬ ‫يحتوي‬ ‫كامل‬ ‫قسم‬ ‫وجود‬ ‫حالة‬ ‫وفحص‬ ‫أقسام‬ ‫أربعة‬ ‫إلى‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫الشجرة‬ ‫تقسيم‬ ‫على‬ ‫تعتمد‬‫واحد‬ ‫قطعة‬ ‫أنه‬ ‫على‬ ‫للشجرة‬ ‫إضافته‬ ‫وبالتالي‬Block‫من‬ ‫أكثر‬ ‫وجود‬ ‫حال‬ ‫في‬ ‫أما‬ ،‫فيه‬ ‫اإلكمال‬ ‫وعدم‬ ‫كامل‬ .‫وهكذا‬ ‫جديد‬ ‫من‬ ‫وفحصهم‬ ‫أقسام‬ ‫ألربعة‬ ‫لتقسيمه‬ ‫القسم‬ ‫هذه‬ ‫على‬ ‫عوديا‬ ‫االستدعاء‬ ‫فيتم‬ ‫لون‬ :‫التالية‬ ‫البنية‬ ‫لها‬ ‫فيها‬ ‫العقدة‬ ‫تكون‬ ‫شجرية‬ ‫بنية‬ ‫هنا‬ ‫لدينا‬ ‫سيكون‬ private static List<Color> WrapDataUnitsAroundCorners(List<List<Color>> listOfDataUnits) { List<Color> listOfWrappedUnits = new List<Color>(); bool isLineEven = true; for (int i = 0; i < listOfDataUnits.Count; i++) { if (isLineEven) { listOfWrappedUnits.AddRange(listOfDataUnits[i]); isLineEven = false; } else { for (int j = listOfDataUnits[i].Count - 1; j >= 0; j--) { listOfWrappedUnits.Add(listOfDataUnits[i][j]); } isLineEven = true; } } return listOfWrappedUnits; } RLETreeNode { RLETreeNode[] _childs; Color _color; bool _isArea; int _i; int _j; int _subArrDim; int _level; Area _area; }
  • 13. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 12 .‫الضغط‬ ‫فيها‬ ‫يتم‬ ‫والتي‬ ‫الشجرية‬ ‫البنية‬ ‫لدينا‬ ‫ويكون‬ 1.1.1‫خوارزمية‬‫الضغط‬ :‫التالي‬ ‫الشكل‬ ‫لها‬ ‫عودية‬ ‫خوارزمية‬ ‫وهي‬ ‫التابع‬ ‫وفي‬ManipulateChilds‫لوج‬ ‫تبعا‬ ‫الحالية‬ ‫العقدة‬ ‫توليد‬ ‫معالجة‬ ‫يتم‬‫بنفس‬ ‫كاملة‬ ‫مساحة‬ ‫ود‬ ‫لـ‬ ‫تبعا‬ ‫(أي‬ ‫ألوان‬ ‫عدة‬ ‫تحوي‬ ‫منطقة‬ ‫عن‬ ‫معبرة‬ ‫واصلة‬ ‫عقد‬ ‫توليد‬ ‫وبالتالي‬ ‫ال‬ ‫أو‬ ‫اللون‬b1, b2, b3, b4.) private void BuildQuadTreeRecursive(ref RLETreeNode currentBaseNode,int iWidth, int jHeight, double arrSubDim, int currentLevel) { int intArrDim = (int)Math.Ceiling(arrSubDim); Color[,] currentSubArrTopLeft = GetSubArr(iWidth, jHeight, intArrDim, currentLevel, Area.TopLeft); Color[,] currentSubArrTopRight = GetSubArr(iWidth, jHeight, intArrDim, currentLevel, Area.TopRight); Color[,] currentSubArrBottomLeft = GetSubArr(iWidth, jHeight, intArrDim, currentLevel, Area.BottomLeft); Color[,] currentSubArrBottomRight = GetSubArr(iWidth, jHeight, intArrDim, currentLevel, Area.BottomRight); bool b1 = CheckAreaIsBulk(currentSubArrTopLeft); bool b2 = CheckAreaIsBulk(currentSubArrTopRight); bool b3 = CheckAreaIsBulk(currentSubArrBottomLeft); bool b4 = CheckAreaIsBulk(currentSubArrBottomRight); ManipulateChilds(ref currentBaseNode, b1, b2, b3, b4, currentSubArrTopLeft[0, 0], currentSubArrTopRight[0, 0], currentSubArrBottomLeft[0, 0], currentSubArrBottomRight[0, 0], iWidth, jHeight, intArrDim); if (arrSubDim / 2 > 0) { if (!b1) BuildQuadTreeRecursive(ref currentBaseNode.Childs[0], iWidth, jHeight, arrSubDim / 2d, currentLevel + 1); if (!b2) BuildQuadTreeRecursive(ref currentBaseNode.Childs[1], iWidth + intArrDim, jHeight, arrSubDim / 2d, currentLevel + 1); if (!b3) BuildQuadTreeRecursive(ref currentBaseNode.Childs[2], iWidth, jHeight + intArrDim, arrSubDim / 2d, currentLevel + 1); if (!b4) BuildQuadTreeRecursive(ref currentBaseNode.Childs[3], iWidth + intArrDim, jHeight + intArrDim, arrSubDim / 2d, currentLevel + 1); } }
  • 14. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 13 1.1.1‫خوارزمية‬‫فك‬‫الضغط‬ ( ‫كاملة‬ ‫مساحة‬ ‫هي‬ ‫هل‬ ‫العقدة‬ ‫لنمط‬ ‫تبعا‬ ‫الصورة‬ ‫وبناء‬ ‫الشجرة‬ ‫في‬ ‫التجول‬ ‫على‬ ‫تعتمد‬Area)‫فقط‬ ‫أنها‬ ‫أم‬ ‫عن‬ ‫معبرة‬ ‫عقدة‬ ‫عبارة‬1.‫كاملة‬ ‫الشجرة‬ ‫ضمن‬ ‫عوديا‬ ‫التجول‬ ‫ويتم‬ ‫ألوان‬ ‫عدة‬ ‫من‬ ‫مؤلفة‬ ‫أصغر‬ ‫مناطق‬ ‫الـ‬ ‫أن‬ ‫هنا‬ ‫(نالحظ‬Decoder‫الشجرية‬ ‫البنية‬ ‫ضمن‬ ‫الرئيسية‬ ‫العقدة‬ ‫(باألحرى‬ ‫الشجرية‬ ‫البنية‬ ‫فقط‬ ‫يأخد‬ ‫سلسلة‬ ‫وليس‬ )‫كلها‬ ‫بالشجرة‬ ‫واصلة‬ ‫ألنها‬ ‫فقط‬Stream.)‫لفكها‬ 1.3‫الخوارزميات‬‫القواميس‬ ‫على‬ ‫المعتمدة‬‫المتغيرة‬‫ديناميكي‬ ‫بشكل‬Adaptive Dictionary ‫خوارزميتي‬ ‫هنا‬ ‫سنناقش‬LZ77, LZW. 1.3.1‫خوارزمية‬LZ77 ،‫والنصوص‬ ‫للصور‬ ‫تستخدم‬‫تعتمد‬‫النافذة‬ ‫مبدأ‬ ‫على‬Window‫المحارف‬ ‫لمعالجة‬ ‫المحجوز‬ ‫المكان‬ ‫و‬ ‫قدما‬Lookahead Buffer ‫المعطيات‬ ‫بنية‬ ‫ضمن‬ ‫المعطيات‬ ‫وحفظ‬PhraseToken. ‫النافذة‬Window public void InfiltrateTree(RLETreeNode currentNode, ref Color[,] colorArrRetieved) { foreach (RLETreeNode nodeChild in currentNode.Childs) { if (nodeChild.IsArea) { FillArea(nodeChild, colorArrRetieved); } else { if (nodeChild.Childs[0] == null) { FillArea(nodeChild, colorArrRetieved); } else { InfiltrateTree(nodeChild, ref colorArrRetieved); } } } } SlidingWindow { int _slidingWindowSize; ParitalStream _window; }
  • 15. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 14 ‫من‬:‫التوابع‬ ‫أهم‬ SlideAhead‫السلسلة‬ ‫ضمن‬ ‫للتقدم‬ :Stream‫الـ‬ ‫لحجم‬ ‫تبعا‬ ‫قدما‬Buffer‫المرادة‬ ‫والخطوة‬ GetBestToken‫الـ‬ ‫لمطابقتهامع‬ ‫وذلك‬ ‫محارف‬ ‫سلسلة‬ ‫أفضل‬ ‫إليجاد‬ ‫وذلك‬ :Buffer ً‫ا‬‫قدم‬ ‫المحجوز‬ ‫المكان‬Buffer :‫التوابع‬ ‫أهم‬ ‫من‬ GetNextStringToken‫السلسلة‬ ‫ضمن‬ ‫للتقدم‬ :Stream‫الـ‬ ‫لحجم‬ ‫تبعا‬ ‫قدما‬Buffer‫المرادة‬ ‫والخطوة‬ ‫المعطيات‬ ‫بنية‬Buffer 1.1.3.3‫خوارزمية‬‫الضغط‬ LookaheadBuffer { int _bufferSize; ParitalStream _buffer; } hraseToken { int _offset; int _matchLength; string _firstPostSymbol; bool _isRawToken; string _strInDictionary; } private List<PhraseToken> EncodeStream(Steam streamOfIds) { List<PhraseToken> encodedStream = new List<PhraseToken>(); for (int i = 0; i < streamOfIds.Count; i++) { Stream nextBufferBlock = _lookaheadBuffer.GetNextStringToken(streamOfIds, i); PhraseToken nextPhraseToken = GetBestToken(i, nextBufferBlock, streamOfIds); if (!nextPhraseToken.IsRawToken) { encodedStream.Add(nextPhraseToken); _slidingWindow.SlideAhead(streamOfIds, i, nextPhraseToken.MatchLength + 1); i += nextPhraseToken.MatchLength; } else { encodedStream.Add(nextPhraseToken); _slidingWindow.SlideAhead(streamOfIds, i, 1); } } return encodedStream; }
  • 16. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 15 1.1.3.3‫خوارزمية‬‫فك‬‫الضغط‬ 1.3.1‫خوارزمية‬LZW ‫نسخ‬ ‫حفظ‬ ‫وبالتالي‬ "‫السالسل‬ ‫"ألجزاء‬ ‫و‬ ‫للمحارف‬ ‫جدول‬ ‫بناء‬ ‫على‬ ‫تعتمد‬ ،‫والنصوص‬ ‫للصور‬ ‫تستخدم‬ ‫بـ‬ ‫وتعويضها‬ ‫الجدول‬ ‫ضمن‬ ‫المتكررة‬ ‫السالسل‬index‫الـ‬ ‫عند‬ ‫الجدول‬ ‫من‬encoder. ‫الرئيسية‬ ‫األلوان‬ ‫ليضم‬ )‫ّا‬‫ي‬‫جزئ‬ ‫ّئ‬‫ي‬‫مه‬ ‫(جدول‬ ‫للجدول‬ ‫تهيئة‬ ‫عملية‬ ‫إجراء‬ ‫مثال‬ ‫الصور‬ ‫حالة‬ ‫في‬ ‫يتم‬‫ضمن‬ .‫الصورة‬ ‫السلسلة‬ ‫فقط‬ ‫وإنما‬ ‫الضغط‬ ‫ك‬ّ‫ك‬‫لمف‬ ‫إضافة‬ ‫معلومات‬ ‫أية‬ ‫أو‬ ‫الجدول‬ ‫نقل‬ ‫يتم‬ ‫ال‬ ‫أنه‬ ‫الخوارزمية‬ ‫هذه‬ ‫فائدة‬ ‫المرمزة‬Encoded Stream‫على‬ ‫فقط‬ ‫اعتمادا‬ ‫جديد‬ ‫من‬ ‫الجدول‬ ‫بناء‬ ‫الضغط‬ ‫مفكك‬ ‫طرف‬ ‫عند‬ ‫يتم‬ ‫و‬ .‫مسح‬ ‫أول‬ ‫عند‬ ‫بناؤه‬ ‫تم‬ ‫والذي‬ ‫البدائي‬ ‫الجدول‬ private Stream DecodeStream(List<PhraseToken> encodedStream) { Stream decodedStream; for (int i = 0; i < encodedStream.Count; i++) { PhraseToken currentToken = encodedStream[i]; if (currentToken.IsRawToken) { decodedStream.Add(currentToken.StrInDictionary); this.SlidingWindow.SlideAhead(decodedStream, decodedStream.Count - 1, 1); } else { int offset = currentToken.Offset; int matchLength = currentToken.MatchLength; string postSymbol = currentToken.FirstPostSymbol; Stream strDecoded = this.SlidingWindow.GetStringInWindow(offset, matchLength); decodedStream.AddRange(strDecoded); this.SlidingWindow.SlideAhead(decodedStream, decodedStream.Count - strDecoded.Count, strDecoded.Count); if (postSymbol != null) decodedStream.Add(postSymbol); this.SlidingWindow.SlideAhead(decodedStream, decodedStream.Count - 1, 1); } } return decodedStream; }
  • 17. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 16 1.1.3.3‫خوارزمية‬‫الضغط‬ 1.1.3.3‫فك‬ ‫خوارزمية‬‫الضغط‬ ‫ّز‬‫م‬‫(المر‬ ‫األول‬ ‫الطرف‬ ‫ضمن‬ ‫جزئيا‬ ‫المهيئ‬ ‫الجدول‬ ‫وعلى‬ ‫المرمزة‬ ‫السلسلة‬ ‫على‬ ‫تعتمد‬Encoder) .‫معاكس‬ ‫بشكل‬ ‫ولكن‬ ‫المرمز‬ ‫لعملية‬ ‫مشابهة‬ ‫عملية‬ ‫إجراء‬ ‫ثم‬ ‫ومن‬ private Stream EncodeStream(Stream streamOfIds) { Stream encodedStream = new Stream(); InitializeTableColor(streamOfIds); for (int i = 0; i < streamOfIds.Count; i++) { Stream window = GetNewWindow(streamOfIds, i); if (window.Count > 1) { encodedStream.Add(Table.KeyOf(window.GetRange(0, window.Count - 1)).ToString()); if (!Table.Contains(window)) Table.AddToTable(window); i += window.Count - 2; } else { encodedStream.Add(Table.KeyOf(window.ToList()).ToString()); if (!Table.Contains(window)) Table.AddToTable(window); } } return encodedStream; } Stream DecodeStream(Stream encodedStream) { Stream dencodedStream; Stream strSoFar ; for (int i = 0; i < encodedStream.Count; i++) { int codeKey = Int32.Parse(encodedStream[i]); Stream matchedCodeInTable = Table.GetMatchedSymbol(codeKey); if (matchedCodeInTable == null) { matchedCodeInTable ; matchedCodeInTable.AddRange(strSoFar); matchedCodeInTable.Add(strSoFar[0]); } dencodedStream.AddRange(matchedCodeInTable); if (strSoFar.Count != 0) { Stream listToAdd ; listToAdd.AddRange(strSoFar); listToAdd.Add(matchedCodeInTable[0]); this.Table.AddToTable(listToAdd); } strSoFar.Clear(); strSoFar.AddRange(matchedCodeInTable); } return dencodedStream; }
  • 18. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫الخوارزميات‬‫اإلضافية‬ 17 1.3‫خوارزمية‬Arithmetic coding ‫الخوارزمية‬‫في‬‫مجاالت‬ ‫يحوي‬ ‫جدول‬ ‫مع‬ ‫استخدامه‬ ‫يتم‬ ‫الدقة‬ ‫متناهي‬ ‫ال‬ ‫حقيقي‬ ‫عدد‬ ‫على‬ ‫تعتمد‬ ‫األساس‬ ‫كل‬،‫الملف‬ ‫في‬ ‫المحارف‬ ‫كل‬ ‫من‬ ‫المحرف‬ ‫هذا‬ ‫تكرار‬ ‫نسبة‬ ‫هو‬ ‫المجال‬ ‫هذا‬ ‫طول‬ ‫حيث‬ ‫لمحرف‬ ‫منها‬ ‫هو‬ ‫المجاالت‬ ‫هذه‬ ‫مجموع‬ ‫وبالتالي‬1.‫والواحد‬ ‫الصفر‬ ‫بين‬ ‫محصور‬ ‫يكون‬ ‫المطلوب‬ ‫الحقيقي‬ ‫والعدد‬ ‫يمكنها‬ ‫وال‬ ‫جدا‬ ‫محدودة‬ ‫الحقيقي‬ ‫المتحول‬ ‫دقة‬ ‫ألن‬ ‫الحاسب‬ ‫على‬ ‫تطبيقها‬ ‫يمكن‬ ‫وال‬ ‫نظرية‬ ‫الطريقة‬ ‫هذه‬ ‫من‬ ‫أكثر‬ ‫ترميز‬11‫تقريبا‬ ‫بايت‬ ‫والتعامل‬ ،‫نسبته‬ ‫وليس‬ ‫المجال‬ ‫في‬ ‫المحرف‬ ‫تكرار‬ ‫مرات‬ ‫عدد‬ ‫تخزين‬ ‫على‬ ‫تعتمد‬ ‫طريفة‬ ‫بالنهاية‬ ‫وجدنا‬ .‫طبيعية‬ ‫كأعداد‬ ‫معها‬ .‫حقيقيا‬ ‫وليس‬ ‫طبيعيا‬ ‫عدد‬ ‫أصبح‬ ‫بالملف‬ ‫االحتفاظ‬ ‫فعليا‬ ‫فيه‬ ‫يتم‬ ‫الذي‬ ‫العدد‬ ‫وبالتالي‬ ‫التي‬ ‫الطريقة‬ ‫بسيط‬ ‫بشكل‬ ‫بالتالي‬ ‫وتختلف‬‫على‬ ‫فيها‬ ‫نحصل‬ ‫التي‬ ‫الطريقة‬ ‫أي‬ ،‫محرف‬ ‫كل‬ ‫ترميز‬ ‫فيها‬ ‫يتم‬ .‫الترميز‬ ‫عدد‬ :‫الترميز‬ ‫خوارزمية‬ :‫الترميز‬ ‫فك‬ ‫خوارزمية‬ while there are still symbols to encode range = high- low + 1 high = low + ((range × high of symbol) / symbol count) - 1 low = low + (range × low of symbol) / symbol count end while while string is not fully decoded range = high - low + 1 encoded value = (encoded value − low) + 1; encoded value = (encoded value × symbol count) ÷ range Get symbol in the current range range = high of symbol - low of symbol + 1 high = low + ((range × high of symbol) / symbol count) - 1 low = low + (range × low of symbol) / symbol count end while
  • 19. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫بنية‬‫المشروع‬(‫الخوارزميات‬‫اإلضافية‬ ) 18 ‫مشاكل‬‫الخوارزمية‬ ‫على‬ ‫نرمز‬ ‫كنا‬ ‫إذا‬n bits‫مرم‬ ‫المحرف‬ ‫تكرار‬ ‫تعداد‬ ‫تحوي‬ ‫التي‬ ‫المجاالت‬ ‫حدود‬ ‫تكون‬ ‫أن‬ ‫فيجب‬‫على‬ ‫زة‬ n-2 bits ‫أهمية‬ ‫األكثر‬ ‫البت‬ ‫تساوي‬ ‫حال‬ ‫في‬MSB‫المتحولين‬ ‫في‬high, low‫لبتات‬ ‫لليسار‬ ‫إزاحة‬ ‫عمل‬ ‫يجب‬ ‫المتحولين‬ 1‫المشروع‬ ‫بنية‬)‫اإلضافية‬ ‫(الخوارزميات‬ ‫الـ‬ ‫خوارزميات‬ ‫بنية‬RLE ‫القواميس‬ ‫خوارزميات‬ ‫بنية‬
  • 20. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫بنية‬‫المشروع‬(‫الخوارزميات‬‫اإلضافية‬ ) 19 ‫خوارزمية‬ ‫بنية‬Arithmetic ‫المساعدة‬ ‫البنى‬
  • 21. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫واجهة‬‫المستخدم‬ 20 3‫واجهة‬‫المستخدم‬ 3.1‫ة‬ّ‫ي‬‫األساس‬ ‫ة‬ّ‫ي‬‫الخوارزم‬ ‫التنفيذي‬ ‫البرنامج‬ ‫نفس‬ ‫على‬ ‫العمل‬ ‫يكون‬ !‫فقط‬ ‫واحد‬ ‫اختيار‬ ‫ومربع‬ ‫زرين‬ ‫على‬ ‫تحوي‬ ،‫ّة‬‫ي‬‫وعمل‬ ‫ّا‬‫د‬‫ج‬ ‫بسيطة‬ ‫األساسي‬ ‫البرنامج‬ ‫واجهة‬ ‫واختيار‬ ‫مختلفين‬ ‫مكانين‬ ‫في‬ ‫بنسخه‬Server.‫اآلخر‬ ‫دون‬ ‫ألحدهما‬ ‫الـ‬ ‫عبر‬ ّ‫م‬‫يت‬ ‫صال‬ّ‫ت‬‫اال‬ ‫زر‬Server‫الـ‬ ّ‫م‬‫ث‬ ‫أوال‬Client‫ونالحظ‬ !‫فقط‬ ‫الوسائط‬ ‫لملفات‬ ‫العرض‬ ‫لكن‬ ،‫ممكنة‬ ‫ملف‬ ‫ألي‬ ‫اإلرسال‬ ‫ّة‬‫ي‬‫وعمل‬ ، ‫ال‬ ‫يستقبل‬ ‫أن‬ ‫قبل‬ ‫ملف‬ ‫أي‬ ‫عرض‬ ‫يمكن‬ ‫ال‬ ‫ه‬ّ‫ن‬‫أ‬ ‫هنا‬Client‫(ال‬ ‫المرسل‬ ‫من‬ ‫الطرود‬Server.) 3.1‫اإلضافية‬ ‫الخوارزميات‬ ‫المشروع‬ ‫يوفر‬‫مع‬ ‫التشغيل‬ ‫وقت‬ ‫أثناء‬ ‫يريد‬ ‫ما‬ ‫إجراء‬ ‫للمستخدم‬ ‫تتيح‬ ‫مرنة‬ ‫تفاعل‬ ‫واجهة‬‫مقارنة‬ .‫منها‬ ‫لكل‬ ‫الضغط‬ ‫وفك‬ ‫الضغط‬ ‫وزمن‬ ‫ونسبة‬ ‫بينها‬ ‫فيما‬ ‫الخوارزميات‬ ‫معا‬ ‫خوارزمية‬ ‫من‬ ‫أكثر‬ ‫تجربة‬ ‫إتاحة‬ :‫الصورة‬ ‫معالجة‬ ‫نافذة‬
  • 22. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫واجهة‬‫المستخدم‬ 21 ‫خوارزمية‬ ‫كل‬ ‫ضغط‬ ‫معلومات‬ ‫إظهار‬ ‫النصوص‬ ‫معالجة‬ ‫نافذة‬
  • 23. April 28, 2012 [LOSSLESS COMPRESSION ENGINE] ‫واجهة‬‫المستخدم‬ 22 ‫كسابقتها‬ ‫وتتيح‬‫و‬ ‫ملف‬ ‫من‬ ‫أو‬ ‫فورا‬ ‫نص‬ ‫إضافة‬‫وفك‬ ‫الضغط‬ ‫عملية‬ ‫عن‬ ‫معلومات‬ ‫إظهار‬‫والزمن‬ ‫الضغط‬ .‫إلخ‬ .. ‫الضغظ‬ ‫ونسبة‬ ‫منهما‬ ‫كل‬ ‫في‬ ‫المنقضي‬