بسم الله الرحمن الرحيم
الحمد لله الذي بحمده تتم النعم , والصلاة والسلام على محمد بن عبد الله سيد الخلق والبشر ...
تحية طيبة وبعد ...
حديثنا اليوم بإذن الله عن ملفات BMP bit map أو خرائط البتات ... التي تخزن معلومات الصور بشكل مباشر دون ضغط ..
والتي تعتمد عليها برامج الرسوميات جميعاً (على حد علمي) في عملية الإكساء Texure والتي من دونها سيبدو أي عمل رائع برمجياً ... تافه رسومياً إلى حد ما ...
_____________________________________
القسم النظري :
لملفات الBMP أربع أنواع حسب عدد الألوان الذي تدعمه فهي إما :
لون واحد وهو الأبيض وليس الأسود كما قد يظن البعض (لأن الأسود هو اللالون ) والله أعلم
16 لون هي الأبيض والأسود والأزرق والأحمر والأخضر والألوان الناتجة عن دمجها مثنى مثنى .. أصفر بنفسجي سماوي مع 8 ألوان إضافية هي نفس السابقة ولكن مع زيادة السطوع ..
256 لون وهي الأبيض والأسود مع 254 لون آخر :)
24 بت وفيها 2^24 لوناً ... طبعاً هي الأكثر استعمالاً وسنناقشها بشكل رئيسي ..
_______________________________________
ينقسم ملف BMP إلى قسمين:
الرأس Header
والخريطة BitMap
الرأس يحوي المعلومات التالية :
1-حجم الملف الكلي
2-مكان بداية الخريطة أي ترتيب الحرف الذي عنده تبدأ الخريطة
3-عدد الأعمدة
4-عدد الأسطر
5-حجم الخريطة وهو حجم الملف منقوصا منه حجم الرأس وقيمته دائما من مضاعفات 4
هذه المعلومات الخمس هي في المواضع نفسها داخل الملف في جميع الأنواع ...
تختلف الأنواع الأربع في شيء يدعى palette والذي يعبر عن مدى الألوان المستعملة حيث تجد في ملفات ال16لون و 256 لون... نموذجاً لكل لون ....
وبذلك سيكون حجم الرأس لملفات ال256 لون أكبر من 786 بايت دون أن تحوي الصورة على أكثر من بكسل واحد .... فلا تستغرب لو مر معك ذلك ...
______________________________________
تختلف الأنواع الأربعة بمحتويات الرأس ...
كما تختلف بطريقة ترميز الألوان ...
فالصورة أحادية اللون تتبع طريقة رائعة خلاصتها أن اللون الأسود يرمز له بصفر واللون الأبيض يرمز له بواحد
وبذلك يكون حرف A مثلا والذي له رقم ASCII له هو 65 ... ترميزه الثنائي01000001يدل على أن السلسلة فيها أسود ثم أبيض ثم أسود ثم أسود .... من اليسار لليمين
بينما تكون طريقة التخزين في 24بت باستعمال 3 بايت لكل بكسل بحيث يرمز كل بكسل إلى كمية أحد (الألوان الأساسية في الضوء) الأزرق والأخضر والأحمر
أما في خرائط 16 لوناً و 256 لوناً ...فيتم ترميز الألوان ببايت واحد فقط ... ويكون هناك نموذح لكل لون في header من 3بايت ... وهكذا سيرمز حرف A مثلا.. للون رقم 65 في الHeader
_____________________________________
ملاحظة بسيطة :إن جميع لواحق الصور الأخرى مثل jpg,png... هي للدلالة على أن الخريطة مضغوطة
ويقوم مستعرض الصور بفك ضغط الصورة ضمنيا قبل فتحها ...يمكن مراجعة هذا المقال تعرف على تقنيات ضغط الصور
_____________________________________
ما الذي يلزمنا لاستجلاب المحتوى من الملف :
1- أن نعرف عدد الأعمدة وعدد الأسطر لأننا غالبا سنخزن المحتوى في مصفوفة
2-مكان بدء الخريطة
_______________________________
بعد أن نستجلب المعلومات ونخزنها في مصفوفة نملك حرية الاختيار في ما نريد فعله بها .....
_______________________________
والآن إلى القسم العملي:
مقدمة مملة عن مرجع المعلومات السابقة :
قد تختلف نظرتك إلى المقالة إذا علمت أن المرجع الوحيد لدي كان notepad++ أي أنني كنت أجرب قراءة الصور الصغيرة جداً عن طريق notepad++
والذي يسمح برؤية الحروف الخاصة ... وكنت ألاحظ الفروق وأسجل الملاحظات
حتى تم المطلوب بفضل الله .... كان يجب أن تعرف هذا على أي حال ....
والآن إليك بعض الصور ...انتهت المقدمة ...
الخطوات التالية لاكتشاف بنية الملف ...
1-قم بتحميل الصورة التالية ...OnePixel.rar أو اتبع الخطوات التالية لإنشائها بالرسام ... الخطوات
ثم قم بفتحها بواسطة Notepad++ إن لم يكن لديك ... حمله من هنا
والآن سترى هذا :
لا تنس أن هذا ملف 24 بت ...
2-والآن إليك هذه الإطارات الملونة والتي تغلف محتويات الرأس بحيث ترى موضع المعلومات فيه
وإليك التفاصيل :
1-الإطار الأحمر في البداية وحرفا BM للدلالة على أن الملف هو BMP وهي ثايتة دوما .
2-الإطار البرتقالي يحوي عددا صحيحا unsigned int يدل على حجم الملف ككل.
طبعا نقرؤه من اليسار لليمين حيث رمز ':' ترميز في ASCII هو 58 ونلاحظ أن طول الملف ككل هو 58 ....
3-المستطيلات الرمادية لا تهمنا في تعبر عن pallete وأشياء أخرى ثابتة.
4-المستطيل الأصفر الذي يحوي الرقم 6 يدلنا على موضع بداية الخريطة ...
طبعا نأخذ ترميز ASCII الرقم 6 هو 54 ...بالفعل بدأت الخريطة عند الموضع 54 ...
5-المستطيلان الأخضران هما أيضا قيمة صحيحة تدل على عددالأعمدة أولا ثم عدد الأسطر ثانيا
لاحظ أن لدينا عمود واحد وسطر واحد.
6-المستطيل بالأحمر الغامق يدل على العدد الصحيح الذي يعطينا حجم الخريطة .
ملاحظة هامة قليلاً :
تعتمد خريطة 24 بت على مضاعفات ال4 في عدد البايتات للسطر الواحد ...
ولذلك يقوم المترجم أو أيا كان ما بداخل برنامج الرسم بإضافة بايت قيمته صفر فقط لإكمال العدد..
7-نلاحظ في المستطيل الأصفر في النهاية المحرف رقم 255 مكررا 3مرات ثم NUL حيث أن المحرف رقم 255 يعني أقصى درجة للون ...
لاحظ أن ترتيب الألوان من اليسار لليمين أرزرق و أخضر وأحمر وليس العكس كما قد يخطئ البعض ...
ثم لاحظ المحرف الصفري والذي كما قلنا لإكمال العدد بحيث يصبح حجم الخريطة من مضاعفات 4
وهذا مثال آخر سيعلمنا شيئاً مهما أخيراً وهو أن آلية ترتيب السطور تكون من الأسفل إلى الأعلى أي أن السطر الأول مكتوب في آخر الملف :
الصورة التي سنقرؤها الآن هي :
أبعادها 2*2 ....
لنقرأ ....
يمكننا ملاحظة مايلي :
السهم الأحمر الذي يدل على بدء الخريطة يشير إلى اللون الأزرق وهو اللون الأول في السطر الثاني !!!
قاعدة : ترميز الأسطر يكون من الأخير للأول ... ولا ننسى وجود البايتات الزائدة في آخر كل سطر ... (نعلم عدد البايتات الزائدة من عدد الأعمدة (لجعل العدد مضاعف لل4))
مثال أخير ... للتأكد ...
لدينا الصورة :
أبعادها 4*4 ... لنقرأها ...
بما أن عدد الأعمدة من مضاعفات ال4 فلا يوجد بايتات زائدة ...
المستطيلات بأربع ألوان ..
زهري برتقالي أحمر بنفسجي ... كل لون لسطر ... لاحظ أن السطر الأول في الخريطة هو السطر الأخير في الصورة ...
_____________________________________________
أنت الآن قادر على قراءة الصورة بالعربي ... ![]()
_____________________________________________
أهم المواقع في ملف BMP للأربع أنواع هي :
الموضع 10 وفيه يخزّن مكان بدء الخريطة
الموضع 18 وفيه يخزن عدد الأعمدة ...
الموضع 22 وفيه يخزّن عدد الأسطر ...
والآن بإمكانك استيراد البيانات إلى مصفوفتك الخاصة ... أصبحت الصورة جزءاً من برنامجك ...
يتبع إن شاء الله

