الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرح تركيبة ملف الـ BMP بالتفصيل !

بدأه مصطفى 36a2 في 5 سبتمبر 2012 · 9 رد · 4,151 مشاهدة · في المقالات العلمية و التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الحمد لله الذي بحمده تتم النعم , والصلاة والسلام على محمد بن عبد الله سيد الخلق والبشر ...

تحية طيبة وبعد ...

حديثنا اليوم بإذن الله عن ملفات 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++ إن لم يكن لديك ... حمله من هنا

والآن سترى هذا :

post-256536-088028000 1346828894_thumb.j

لا تنس أن هذا ملف 24 بت ...

2-والآن إليك هذه الإطارات الملونة والتي تغلف محتويات الرأس بحيث ترى موضع المعلومات فيه

post-256536-064293600 1346829624_thumb.j

وإليك التفاصيل :

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

وهذا مثال آخر سيعلمنا شيئاً مهما أخيراً وهو أن آلية ترتيب السطور تكون من الأسفل إلى الأعلى أي أن السطر الأول مكتوب في آخر الملف :

الصورة التي سنقرؤها الآن هي :

post-256536-042333300 1346828868_thumb.j

أبعادها 2*2 ....

لنقرأ ....

post-256536-024506000 1346831253_thumb.j

يمكننا ملاحظة مايلي :

السهم الأحمر الذي يدل على بدء الخريطة يشير إلى اللون الأزرق وهو اللون الأول في السطر الثاني !!!

قاعدة : ترميز الأسطر يكون من الأخير للأول ... ولا ننسى وجود البايتات الزائدة في آخر كل سطر ... (نعلم عدد البايتات الزائدة من عدد الأعمدة (لجعل العدد مضاعف لل4))

مثال أخير ... للتأكد ...

لدينا الصورة :

post-256536-074641200 1346829683_thumb.j

أبعادها 4*4 ... لنقرأها ...

post-256536-038600200 1346829814_thumb.p

بما أن عدد الأعمدة من مضاعفات ال4 فلا يوجد بايتات زائدة ...

المستطيلات بأربع ألوان ..

زهري برتقالي أحمر بنفسجي ... كل لون لسطر ... لاحظ أن السطر الأول في الخريطة هو السطر الأخير في الصورة ...

_____________________________________________

أنت الآن قادر على قراءة الصورة بالعربي ... happy.gif

_____________________________________________

أهم المواقع في ملف BMP للأربع أنواع هي :

الموضع 10 وفيه يخزّن مكان بدء الخريطة

الموضع 18 وفيه يخزن عدد الأعمدة ...

الموضع 22 وفيه يخزّن عدد الأسطر ...

والآن بإمكانك استيراد البيانات إلى مصفوفتك الخاصة ... أصبحت الصورة جزءاً من برنامجك ...

يتبع إن شاء الله

المرفقات
000.jpg12.jpg13.jpg111.jpg17.png15.jpg

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 5 سبتمبر 2012 في 10:54

4
#2

رائع اخي جزيت خيرا

.Because it's FUN to be ALIVE

#3

أهلاً بك أخي الفاضل ...

الموضوع لم ينتهي بعد ...

سنتحدث في المقالة القادمة عما يلي :

  1. تطبيق عملي لاستيراد الصورة للبرنامج ..
  2. سنطبق فكرة بسيطة لضغط الصور ..
  3. سنعيد التطبيق مع الصور أحادية اللون وذات 16 و 256 لوناً ..

وأخيراً سننشئ برنامجاً يقوم بطباعة الصورة على الشاشة السوداء Console باستخدام دوال windows API

أرجو أن يكون فيه الفائدة لمن يرغب بالاطلاع على هذا الموضوع ...

اسمح لي أن أطلب منك أن تقوم بتطبيق المعلومات الواردة فيه ... بحيث نتدارك معاً أي خلل ... وشكراً لقراءتك المقال ...

والسلام عليكم ورحمة الله وبركاته

#4

+1

تطبيق بسيط في هذا الموضوع

كود برنامج صغير BMB_Lab, لإجراء عمليات على صورة bmp 24bits

--------------- Bmp Lab help -----------------------

Syntax :
  BMB_Lab <source bmp image> <output bmp image> [-<operation> [...]]
Operations:
  iw       :Inverse Width.
  wh       :Inverse Height.
  vlr      :Vertical   axis is analogy axis(Left to Right).
  hdu      :Horizontal axis is analogy axis(Down to Up).
  vrl      :Vertical   axis is analogy axis(Right to Left).
  hud      :Horizontal axis is analogy axis(Up to Down).
  cr <val> :Chgange Red.(Ex: cr 102)
  cg <val> :Chgange Green.cg 102
  cb <val> :Chgange Blue.cb 102
  wb       :Make the image colors Wight & Black.
  comp     :Compress the bitmap to the half.
Exemple :
  BMB_Lab c:\image.bmp c:\res.bmp -iw -hdu -cr 160 -cb 200 -comp

http://www.mediafire.com/?czzbkr0x3wmbcr6

1

[سبحان الله و بحمده, سبحان الله العظيم]

#5

شكراً لك أخي ياسين على مرورك ...

ولكن في الحقيقة أرغب في أن نكتفي من الأكواد الجاهزة ... خصوصاً في أمور بسيطة ومفهومة تماماً مثل هذا الموضوع ...

لذلك لا مشكلة في أن نرى محاولة الأعضاء الكرام في التأثيرات التالية على الصور :

  1. التدوير مع عقارب الساعة وعكسها ...بمقدار 90 و180 و270 درجة ...
  2. عمل انعكاس عمودي وأفقي للصورة ..
  3. زيادة إشباع الألوان في الصورة ..
  4. زيادة الإضاءة في الصورة ..
  5. ضغط الصورة بطريقة ما ....

وسوف نتحدث عن هذه المواضيع فهي رياضياتية بحتة ...

طالما أن المصفوفة عندنا ... فالباقي هو مجرد عمل رياضي لتغيير مواضع العناصر بالنسبة للعمليات 1و2 وتغيير قيم العناصر بالنسبة للعمليات 3و4و5

نلتقي بإذن الله تعالى ...

تحياتي

#6

بصراحة أخى مصطفى موضوع ممتاز015.gif , بجد أنا حتى الان أستفدت كثيير من هذا الشرح .

بس يا ريت تكمل بقية الموضوع عشان تكتمل الرؤية .

  • يا ريت أخى لو تعمل مواضيع أخرى تشرح بنية أنواع أخرى من الملفات , ولا يشترط يكون صور فقط , بس بجد هتكون مرجع عربى ممتاز .
  • أيضا لو عندك مراجع أو مواقع تشرح بنية الملفات أكون شاكر جدا

وربنا يوفقك ..........

تم تعديل هذه المشاركة بواسطة مستر برمجة في 8 سبتمبر 2012 في 18:35

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#7

مرحبا بك ماستر ... صورة جامدة ...laugh.gif

اقتباس
  • يا ريت أخى لو تعمل مواضيع أخرى تشرح بنية أنواع أخرى من الملفات , ولا يشترط يكون صور فقط , بس بجد هتكون مرجع عربى ممتاز .
  • أيضا لو عندك مراجع أو مواقع تشرح بنية الملفات أكون شاكر جدا

أعتقد أن الإخوة يمكن أن يفيدوننا في ذلك ...

كنت احاول فهم آلية عمل mp3 أيضاً ... وهناك مشروع exe قد بدأت به بالفعل وفيه نتائج مقبولة نوعاً ما ...

في الحقيقة من الأصل كان هدف الموضوع .. أن يكون مرجعاً .. حتى لا أضطر لشرحه عندما أضع التطبيق ...

يعني التطبيق هو الأصل ... تأخرت فيه حقك على رأسي... خلال أيام إن شاء الله ...

تحياتي

#8

أخي مصطفى ، هل يمكنك أن تحول الموضوع إلى PDF لقراءته offline ؟

rS3eY.png
#9
Hamza+C+ASM كتب:

أخي مصطفى ، هل يمكنك أن تحول الموضوع إلى PDF لقراءته offline ؟

إذا كنت تستخدم FireFox اضغط ctrl+s واحفظ الصفحة ... كي تقرأها offline .... إلى حين تحوله إلى pdf smile.gif

#10

سأجرب الأمر شكرا لك مرة آخرى ... + هذه الطريقة تمكننا من حفظ الصفحة كاملة ، مع أنني لا أحبها سأفعلها كرمال موضوعك

(أحب السوريين أكثر من نفسي 001.gif)

rS3eY.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…