تنسيق ملف BMP

تنسيق ملف BMP ، أو bitmap ، هو تنسيق ملف صورة رسومية نقطية يستخدم لتخزين الصور الرقمية النقطية ، بشكل مستقل عن جهاز العرض (مثل محول الرسومات )، وخاصة على أنظمة التشغيل Microsoft Windows [ 2 ] و OS/2 [ 3 ] .

يُمكن لملف BMP تخزين الصور الرقمية ثنائية الأبعاد بأعماق لونية متنوعة ، مع إمكانية إضافة ضغط البيانات وقنوات ألفا وملفات تعريف الألوان . وتغطي مواصفات ملفات تعريف ويندوز (WMF) ملف BMP. [ 4 ]

الصور النقطية المستقلة عن الجهاز وتنسيق ملف BMP

الرسم التخطيطي 1 - بنية ملف صورة نقطية
الرسم التخطيطي 1 - بنية ملف صورة نقطية

حدّدت مايكروسوفت تمثيلاً خاصاً للصور النقطية الملونة ذات أعماق لونية مختلفة، وذلك لتسهيل تبادل الصور النقطية بين الأجهزة والتطبيقات ذات التمثيلات الداخلية المتنوعة. أطلقت مايكروسوفت على هذه الصور اسم "الصور النقطية المستقلة عن الجهاز" أو "DIBs"، ويُطلق على تنسيق ملفاتها اسم "تنسيق ملف DIB" أو "تنسيق ملف صورة BMP".

وفقًا لدعم مايكروسوفت: [ 5 ]

تُعدّ صورة البت المستقلة عن الجهاز (DIB) تنسيقًا يُستخدم لتعريف صور البت المستقلة عن الجهاز بدقة ألوان مختلفة. والغرض الرئيسي من DIB هو السماح بنقل صور البت من جهاز إلى آخر (ومن هنا جاءت تسمية "المستقلة عن الجهاز"). يُعتبر DIB تنسيقًا خارجيًا، على عكس صورة البت المعتمدة على الجهاز، والتي تظهر في النظام ككائن صورة بت (يتم إنشاؤه بواسطة تطبيق...). عادةً ما يتم نقل DIB في ملفات تعريفية (باستخدام دالة StretchDIBits() عادةً)، وملفات BMP، والحافظة ( تنسيق بيانات CF_DIB ).

تتناول الأقسام التالية بالتفصيل البيانات المخزنة في ملف BMP أو DIB. هذا هو تنسيق ملف BMP القياسي. [ 5 ] تقوم بعض التطبيقات بإنشاء ملفات صور نقطية لا تتوافق مع وثائق مايكروسوفت. كما أن بعض الحقول غير مستخدمة، حيث ستجد القيمة 0 في هذه الحقول غير المستخدمة.

بنية الملفات

يتكون ملف الصورة النقطية من هياكل ثابتة الحجم (رؤوس) بالإضافة إلى هياكل متغيرة الحجم تظهر بتسلسل محدد مسبقًا. قد تظهر نسخ مختلفة من بعض هذه الهياكل في الملف، نظرًا للتطور الطويل لهذا النوع من الملفات.

بالرجوع إلى الرسم التخطيطي 1، يتكون ملف الصورة النقطية من هياكل بالترتيب التالي:

اسم البنيةخياريالحجم (بايت)غايةتعليق
رأس ملف الصورة النقطيةلا14معلومات عامةلا حاجة لذلك بعد تحميل الملف في الذاكرة
رأس DIBلاحجم ثابت (توجد 7 إصدارات مختلفة)معلومات تفصيلية وتنسيق البكسليلي ذلك مباشرةً رأس ملف الصورة النقطية
أقنعة بت إضافيةنعم12 أو 16تنسيق البكسليظهر هذا الخيار فقط في حال كان رأس DIB هو BITMAPINFOHEADER وتم تعيين عضو طريقة الضغط إما إلى BI_BITFIELDS أو BI_ALPHABITFIELDS
جدول الألوانيعتمد علىيختلفالألوان (مصفوفة البكسل)إلزامي لأعماق الألوان ≤ 8 بت
الفجوة 1نعميختلفمحاذاة الهيكلأحد آثار مصفوفة إزاحة الملف إلى البكسل في رأس ملف الصورة النقطية
مصفوفة بكسللايختلفقيم البكسليتم تحديد تنسيق البكسل بواسطة رأس DIB أو أقنعة البتات الإضافية. يتم إضافة حشو إلى كل صف في مصفوفة البكسل ليصبح حجمه من مضاعفات 4 بايت.
الفجوة 2نعميختلفمحاذاة الهيكلأحد آثار حقل إزاحة بيانات ملف تعريف ICC في رأس DIB
ملف تعريف ألوان ICCنعميختلفملف تعريف الألوان (لإدارة الألوان)يمكن أن يحتوي أيضًا على مسار إلى ملف خارجي يحتوي على ملف تعريف الألوان. عند تحميله في الذاكرة كـ "DIB غير مضغوط"، فإنه يقع بين جدول الألوان و Gap1. [ 6 ]

ملفات DIB في الذاكرة

يتحول ملف صورة نقطية مُحمّل في الذاكرة إلى بنية بيانات DIB، وهي عنصر أساسي في واجهة برمجة تطبيقات Windows GDI. تتشابه بنية بيانات DIB في الذاكرة تقريبًا مع تنسيق ملف BMP، لكنها لا تحتوي على رأس ملف الصورة النقطية ذي الـ 14 بايت، وتبدأ برأس DIB. بالنسبة لملفات DIB المُحمّلة في الذاكرة، يمكن أن يتكون جدول الألوان أيضًا من مدخلات 16 بت تُشكل مؤشرات للوحة الألوان المُستخدمة حاليًا [ 7 ] (مستوى إضافي من التوجيه غير المباشر)، بدلًا من تعريفات ألوان RGB الصريحة. في جميع الحالات، يجب أن تبدأ مصفوفة البكسل من عنوان ذاكرة يكون من مضاعفات 4 بايت. في ملفات DIB غير المُضغوطة المُحمّلة في الذاكرة، يجب وضع بيانات ملف تعريف اللون الاختيارية مباشرةً بعد جدول الألوان وقبل الفجوة 1 ومصفوفة البكسل [ 6 ] (على عكس الشكل 1).

عندما يكون حجم الفجوتين gap1 و gap2 صفرًا، يُشار عادةً إلى بنية بيانات DIB الموجودة في الذاكرة باسم "DIB المضغوط"، ويمكن الإشارة إليها بمؤشر واحد يشير إلى بداية رأس DIB. في جميع الحالات، يجب أن تبدأ مصفوفة البكسل عند عنوان ذاكرة من مضاعفات 4 بايت. في بعض الحالات، قد يكون من الضروري تعديل عدد الإدخالات في جدول الألوان لفرض أن يكون عنوان ذاكرة مصفوفة البكسل من مضاعفات 4 بايت. [ 7 ] بالنسبة لـ "DIB المضغوط" المحمّل في الذاكرة، يجب أن تلي بيانات ملف تعريف اللون الاختيارية مصفوفة البكسل مباشرةً، كما هو موضح في الشكل 1 (مع gap1=0 و gap2=0). [ 6 ] تتطلب وظائف واجهة برمجة تطبيقات الحافظة في نظام Windows ، بالإضافة إلى بعض وظائف فرشاة Windows ذات الأنماط ووظائف الموارد، استخدام "DIB المضغوط". [ 8 ]

رأس ملف الصورة النقطية

توجد هذه الكتلة من البايتات في بداية الملف وتُستخدم لتحديد هويته. يقرأ التطبيق عادةً هذه الكتلة أولًا للتأكد من أن الملف هو بالفعل ملف BMP وأنه غير تالف. أول بايتين في تنسيق ملف BMP هما الحرف "B" ثم الحرف "M" في ترميز ASCII . تُخزَّن جميع القيم العددية بتنسيق little-endian (أي البايت الأقل أهمية أولًا).

الإزاحة (بايت)الحجم (بايت)وصف
02يُستخدم حقل العنوان لتحديد ملفي BMP وDIB 0x42 0x4Dبنظام العد الست عشري ، تمامًا كما هو الحال BMفي نظام ASCII. القيم الممكنة هي:
بي إم
ويندوز 3.1x، 95، NT، ... إلخ.
بكالوريوس
مصفوفة بتات بنية نظام التشغيل OS/2
سي آي
رمز لون بنية نظام التشغيل OS/2
سي بي
مؤشر اللون الثابت في نظام التشغيل OS/2
IC
رمز بنية نظام التشغيل OS/2
العلاج الطبيعي
مؤشر نظام التشغيل OS/2
24حجم ملف BMP بالبايت
62محجوز؛ تعتمد القيمة الفعلية على التطبيق الذي يُنشئ الصورة، وإذا تم إنشاؤها يدويًا فقد تكون 0
82محجوز؛ تعتمد القيمة الفعلية على التطبيق الذي يُنشئ الصورة، وإذا تم إنشاؤها يدويًا فقد تكون 0
104الإزاحة، أي عنوان البداية، للبايت حيث يمكن العثور على بيانات صورة الخريطة النقطية (مصفوفة البكسل).

رأس DIB (رأس معلومات الصورة النقطية)

تُزوّد ​​هذه الكتلة من البايتات التطبيق بمعلومات تفصيلية حول الصورة، والتي ستُستخدم لعرضها على الشاشة. تتطابق هذه الكتلة أيضًا مع رأس البيانات المستخدم داخليًا في نظامي التشغيل Windows و OS/2، ولها عدة صيغ مختلفة. تحتوي جميعها على حقل من نوع dword (32 بت) يُحدد حجمها، مما يُسهّل على التطبيق تحديد رأس البيانات المستخدم في الصورة. يعود سبب وجود رؤوس بيانات مختلفة إلى قيام مايكروسوفت بتوسيع تنسيق DIB عدة مرات. يمكن استخدام رؤوس البيانات الموسعة الجديدة مع بعض وظائف GDI بدلًا من القديمة، مما يوفر مزيدًا من الوظائف. نظرًا لأن GDI يدعم وظيفة تحميل ملفات الصور النقطية، فإن تطبيقات Windows النموذجية تستخدم هذه الوظيفة. من نتائج ذلك أن تنسيقات BMP التي تدعمها هذه التطبيقات تتطابق مع التنسيقات التي يدعمها إصدار Windows المُشغّل. راجع الجدول أدناه لمزيد من المعلومات.

رؤوس الصور النقطية لنظامي التشغيل ويندوز و OS/2
الحجم (بايت)اسم العنواندعم نظام التشغيلسماتبقلم
12رأس ملف الصورة النقطية OS21XBITMAPHEADERويندوز 2.0 أو أحدث، نظام التشغيل OS/2 1.x [ 3 ]
64OS22XBITMAPHEADEROS/2 BITMAPCOREHEADER 2يضيف خاصية التظليل النصفي . يضيف خاصية RLE وضغط هوفمان أحادي البعد.
16OS22XBITMAPHEADERيحتوي هذا الإصدار من الترويسة السابقة على أول 16 بايت فقط، ويُفترض أن تكون البايتات المتبقية ذات قيم صفرية. [ 3 ]

ومن الأمثلة على ذلك الصورة pal8os2v2-16.bmp [ 9 ] من مجموعة BMP. [ 10 ]

40رأس معلومات الصورة النقطيةويندوز إن تي ، الإصدار 3.1x أو أحدث [ 2 ]يوسّع عرض وارتفاع الصورة النقطية إلى 4 بايت. ويضيف صيغ 16 بت لكل بكسل و32 بت لكل بكسل. ويضيف ضغط RLE.
52BITMAPV2INFOHEADERغير موثقيضيف أقنعة بت RGB.مايكروسوفت
56BITMAPV3INFOHEADERلم يتم توثيق ذلك رسميًا، ولكن تم نشر هذه الوثائق على منتديات Adobe، من قبل موظف في Adobe مع بيان مفاده أن المعيار كان في وقت ما في الماضي مدرجًا في وثائق MS الرسمية [ 11 ].يضيف قناع بت قناة ألفا .مايكروسوفت
108BITMAPV4HEADERويندوز إن تي 4.0 أو 95 أو أحدثيضيف نوع مساحة اللون وتصحيح جاما
124BITMAPV5HEADERويندوز إن تي 5.0 أو 98 أو أحدثإضافة ملفات تعريف ألوان ICCجيمب
الإزاحة (بايت)الحجم (بايت)OS/2 1.x BITMAPCOREHEADER [ 3 ]
144حجم هذا العنوان (12 بايت)
182عرض الصورة النقطية بالبكسل (16 بت غير موقع)
202ارتفاع الصورة النقطية بالبكسل (عدد صحيح غير مُوقّع 16 بت)
222يجب أن يكون عدد مستويات الألوان 1
242عدد البتات لكل بكسل
الصور النقطية لنظام التشغيل OS/2 1.x غير مضغوطة ولا يمكن أن تكون 16 أو 32 بت لكل بكسل.

يختلف ملف BITMAPCOREHEADER الخاص بنظام التشغيل Windows 2.x عن ملف BITMAPCOREHEADER الخاص بنظام التشغيل OS/2 1.x (الموضح في الجدول أعلاه) في تفصيل واحد وهو أن حقلي عرض الصورة وارتفاعها عبارة عن أعداد صحيحة موقعة، وليست أعدادًا غير موقعة. [ 12 ]

تضيف الإصدارات اللاحقة لـ BITMAPINFOHEADER الحقول إلى نهاية رأس الإصدار السابق فقط. على سبيل المثال: يضيف BITMAPV2INFOHEADER حقولًا إلى BITMAPINFOHEADER ، ويضيف BITMAPV3INFOHEADER حقولًا إلى BITMAPV2INFOHEADER .

تم إدخال قناة ألفا مدمجة مع BITMAPV3INFOHEADER غير الموثق ومع BITMAPV4HEADER الموثق (منذ ويندوز 95 )، وتُستخدم في نظام تسجيل الدخول والسمات في ويندوز XP، بالإضافة إلى مايكروسوفت أوفيس (منذ الإصدار 2000). كما تدعمها بعض برامج تحرير الصور ، مثل أدوبي فوتوشوب منذ الإصدار 7 وأدوبي فلاش منذ الإصدار MX 2004 (المعروف آنذاك باسم ماكروميديا ​​فلاش). وتدعمها أيضًا برامج جيمب ، وجوجل كروم ، ومايكروسوفت باوربوينت ، ومايكروسوفت وورد .

لأسباب تتعلق بالتوافق، تستخدم معظم التطبيقات رؤوس DIB القديمة لحفظ الملفات. ونظرًا لتوقف دعم نظام التشغيل OS/2 بعد نظام التشغيل Windows 2000، فإن تنسيق Windows الشائع حاليًا هو رأس BITMAPINFOHEADER . راجع الجدول التالي للاطلاع على وصفه. تُخزَّن جميع القيم كأعداد صحيحة غير مُوقَّعة، ما لم يُنص على خلاف ذلك صراحةً.

الإزاحة (بايت)الحجم (بايت)ويندوز BITMAPINFOHEADER [ 2 ]
144حجم هذا العنوان بالبايت (40)
184عرض الصورة النقطية بالبكسل (عدد صحيح موقّع)
224ارتفاع الصورة النقطية بالبكسل (عدد صحيح ذو إشارة)
262عدد مستويات الألوان (يجب أن يكون 1)
282عدد البتات لكل بكسل، وهو ما يُعرف بعمق اللون في الصورة. القيم النموذجية هي 1، 4، 8، 16، 24، و32.
304طريقة الضغط المستخدمة. انظر الجدول التالي للاطلاع على قائمة بالقيم الممكنة.
344حجم الصورة. هذا هو حجم بيانات الصورة النقطية الخام؛ ويمكن إعطاء قيمة وهمية 0 للصور النقطية BI_RGB.
384الدقة الأفقية للصورة. (بكسل لكل متر، عدد صحيح موجب)
424الدقة الرأسية للصورة. (بكسل لكل متر، عدد صحيح موجب)
464عدد الألوان في لوحة الألوان، أو 0 للوضع الافتراضي 2n
504عدد الألوان المهمة المستخدمة، أو صفر عندما يكون كل لون مهمًا؛ يتم تجاهلها عمومًا

يمكن أن تكون طريقة الضغط (الإزاحة 30) كالتالي:

قيمةتم التعرف عليه بواسطةطريقة الضغطتعليق
0BI_RGBلا أحدالأكثر شيوعاً
1BI_RLE8RLE 8 بت/بكسللا يمكن استخدامه إلا مع الصور النقطية 8 بت/بكسل
2BI_RLE4RLE 4 بت/بكسللا يمكن استخدامه إلا مع الصور النقطية ذات 4 بت/بكسل
3حقول البيانات الثنائيةOS22XBITMAPHEADER : هوفمان أحادي البعدBITMAPV2INFOHEADER : أقنعة حقول بت RGB، BITMAPV3INFOHEADER + : RGBA
4BI_JPEGOS22XBITMAPHEADER : RLE-24BITMAPV4INFOHEADER + : صورة JPEG للطباعة [ 13 ]
5BI_PNGBITMAPV4INFOHEADER + : صورة PNG للطباعة [ 13 ]
6حقول الأبجدية الثنائيةأقنعة حقل بت RGBAنظام التشغيل Windows CE 5.0 فقط مع .NET 4.0 أو أحدث
11BI_CMYKلا أحدملفات تعريف ويندوز فقط CMYK [ 4 ]
12BI_CMYKRLE8RLE-8ملفات تعريف ويندوز فقط CMYK
13BI_CMYKRLE4RLE-4ملفات تعريف ويندوز فقط CMYK

يحتوي OS/2 2.x OS22XBITMAPHEADER ( BITMAPINFOHEADER2 في وثائق IBM) على 24 بايت إضافية: [ 3 ]

الإزاحة (بايت)الحجم (بايت)OS/2 OS22XBITMAPHEADER ( BITMAPINFOHEADER2 ) [ 3 ]
542قيمة مُعَدَّة تُحدد وحدات الدقة الأفقية والرأسية (الإزاحات 38 و42). القيمة الوحيدة المُحددة هي 0، أي بكسل لكل متر.
562الحشو. يتم تجاهله ويجب أن يكون صفرًا
582قيمة مُعدّدة تُشير إلى اتجاه ملء البتات للصورة النقطية. القيمة الوحيدة المُحددة هي 0، ما يعني أن نقطة الأصل هي الزاوية السفلية اليسرى. تُملأ البتات من اليسار إلى اليمين، ثم من الأسفل إلى الأعلى.

لاحظ أن صور ويندوز النقطية (التي لا تتضمن هذا الحقل) يمكنها أيضًا تحديد نقطة أصل في الزاوية العلوية اليسرى (حيث تملأ البتات من اليسار إلى اليمين، ثم من الأعلى إلى الأسفل) باستخدام قيمة سالبة لارتفاع الصورة.

602قيمة مُعدّدة تشير إلى خوارزمية التظليل النصفي التي يجب استخدامها عند عرض الصورة.
624معامل التظليل النصفي 1 (انظر أدناه)
664معامل التظليل النصفي 2 (انظر أدناه)
704قيمة مُعدّدة تُشير إلى ترميز اللون لكل عنصر في جدول الألوان. القيمة الوحيدة المُحددة هي 0، والتي تُشير إلى RGB.
744معرّف مُحدد من قِبل التطبيق. لا يُستخدم لعرض الصور.

يمكن أن تكون خوارزمية التظليل النصفي (الإزاحة 60) كالتالي:

قيمةخوارزمية التظليل النصفيتعليق
0لا أحدالأكثر شيوعاً
1انتشار الخطأيمثل معامل التظليل النصفي 1 (الإزاحة 64) نسبة تخميد الخطأ. تشير القيمة 100 إلى عدم وجود تخميد، بينما تشير القيمة 0 إلى عدم انتشار الأخطاء.
2باندا: خوارزمية معالجة للحصول على المستندات غير المشفرةتمثل معلمات التظليل النصفية 1 و2 (الإزاحات 64 و68 على التوالي) الأبعاد X وY، بالبكسل على التوالي، لنمط التظليل النصفي المستخدم
3دائرة فائقةتمثل معلمات التظليل النصفية 1 و2 (الإزاحات 64 و68 على التوالي) الأبعاد X وY، بالبكسل على التوالي، لنمط التظليل النصفي المستخدم

جدول الألوان

يظهر جدول الألوان (لوحة الألوان) في ملف صورة BMP مباشرةً بعد رأس ملف BMP، ورأس DIB، وبعد أقنعة البتات الثلاثة أو الأربعة الاختيارية في حال استخدام رأس BITMAPINFOHEADER مع خيار BI_BITFIELDS (12 بايت) أو BI_ALPHABITFIELDS (16 بايت). وبالتالي، فإن إزاحته تساوي حجم رأس BITMAPFILEHEADER مضافًا إليه حجم رأس DIB (بالإضافة إلى 12-16 بايت اختيارية لأقنعة البتات الثلاثة أو الأربعة). ملاحظة: في نظام التشغيل Windows CE، يمكن استخدام رأس BITMAPINFOHEADER مع خيار BI_ALPHABITFIELDS [ 14 ] في عنصر biCompression.

عدد عناصر لوحة الألوان إما 2^ n (حيث n هو عدد البتات لكل بكسل) أو عدد أصغر مُحدد في رأس الملف (في تنسيق رأس BITMAPCOREHEADER لنظام التشغيل OS/2 ، لا تُدعم إلا لوحة الألوان كاملة الحجم). [ 3 ] [ 5 ] في معظم الحالات، يشغل كل عنصر في جدول الألوان 4 بايتات، بالترتيب: أزرق، أخضر، أحمر، 0x00 (انظر أدناه للاستثناءات). يُفهرس هذا في BITMAPINFOHEADER ضمن عنصر البنية biBitCount.

جدول الألوان عبارة عن كتلة من البايتات (جدول) تُدرج الألوان المستخدمة في الصورة. يُوصف كل بكسل في صورة ملونة مُفهرسة بعدد من البتات (1 أو 2 أو 4 أو 8)، وهو فهرس للون واحد مُحدد في هذا الجدول. الغرض من لوحة الألوان في الصور النقطية الملونة المُفهرسة هو إعلام التطبيق باللون الفعلي الذي تُقابله كل قيمة من قيم الفهرس. أما الغرض من جدول الألوان في الصور النقطية غير المُفهرسة (غير المُعتمدة على لوحة ألوان) فهو سرد الألوان المستخدمة في الصورة النقطية لأغراض التحسين على الأجهزة ذات إمكانيات عرض الألوان المحدودة، ولتسهيل التحويل المستقبلي إلى تنسيقات بكسل مختلفة واعتماد لوحة ألوان.

تُحدد الألوان في جدول الألوان عادةً بتنسيق ARGB32 ذي 4 بايت لكل مدخل . أما جدول الألوان المستخدم مع وحدة BITMAPCOREHEADER في نظام التشغيل OS/2 فيستخدم تنسيق RGB24 ذي 3 بايت لكل مدخل . [ 3 ] [ 5 ] بالنسبة لملفات DIB المحملة في الذاكرة، يمكن أن يتكون جدول الألوان اختياريًا من مدخلات ثنائية البايت - تُشكل هذه المدخلات مؤشرات إلى لوحة الألوان المُطبقة حاليًا [ 7 ] بدلًا من تعريفات ألوان RGB الصريحة.

لا تمنع مايكروسوفت وجود قناع بت صالح لقناة ألفا [ 15 ] في BITMAPV4HEADER و BITMAPV5HEADER للصور الملونة المفهرسة بدقة 1 بت لكل بكسل، و4 بت لكل بكسل، و8 بت لكل بكسل، مما يشير إلى إمكانية تحديد مكون ألفا في إدخالات جدول الألوان باستخدام التنسيق 8.8.8.[0-8].[0-8] عبر العنصر RGBQUAD.rgbReserved [ 16 ] . مع ذلك، تمنع بعض إصدارات وثائق مايكروسوفت هذه الميزة، حيث تنص على أن قيمة العنصر RGBQUAD.rgbReserved "يجب أن تكون صفرًا".

كما ذُكر سابقًا، لا يُستخدم جدول الألوان عادةً عندما تكون وحدات البكسل بتنسيق 16 بت لكل بكسل (16bpp) (أو أعلى)؛ إذ لا توجد عادةً مدخلات لجدول الألوان في ملفات الصور النقطية هذه. مع ذلك، تُشير وثائق مايكروسوفت (على موقع MSDN بتاريخ 16 نوفمبر 2010 [ 17 ] ) إلى أنه بالنسبة لتنسيق 16bpp (أو أعلى)، يُمكن وجود جدول الألوان لتخزين قائمة ألوان مُخصصة للتحسين على الأجهزة ذات إمكانيات عرض الألوان المحدودة، مع الإشارة أيضًا إلى أنه في هذه الحالات، لا توجد مدخلات لوحة ألوان مُفهرسة في جدول الألوان هذا. قد يبدو هذا مُتناقضًا إذا لم يتم التمييز بين مدخلات لوحة الألوان الإلزامية وقائمة الألوان الاختيارية.

تخزين البكسل

تُجمّع البتات التي تُمثل بكسلات الصورة النقطية في صفوف (تُعرف أيضًا بالخطوات أو خطوط المسح). ويتم تقريب حجم كل صف إلى مُضاعفات العدد 4 بايت (قيمة DWORD من 32 بت ) عن طريق الحشو. [ 18 ]

بالنسبة للصور التي يزيد ارتفاعها عن 1، يتم تخزين صفوف متعددة محشوّة بشكل متتابع، مما يشكل مصفوفة بكسل.

يمكن حساب إجمالي عدد البايتات اللازمة لتخزين صف واحد من البكسلات على النحو التالي: حجم الصف=بت لكل بكسلعرض الصورة324=بت لكل بكسلعرض الصورة+31324،{\displaystyle {\text{RowSize}}=\left\lceil {\frac {{\text{BitsPerPixel}}\cdot {\text{ImageWidth}}}{32}}\right\rceil \cdot 4=\left\lfloor {\frac {{\text{BitsPerPixel}}\cdot {\text{ImageWidth}}+31}{32}}\right\rfloor \cdot 4,}

يتم التعبير عن عرض الصورة بالبكسل. تستخدم المعادلة أعلاه دالتي الجزء الصحيح والجزء الصحيح .

يمكن حساب إجمالي عدد البايتات اللازمة لتخزين مصفوفة من البكسلات في صورة ذات n بت لكل بكسل (bpp)، مع 2^ n لون، من خلال مراعاة تأثير تقريب حجم كل صف إلى مضاعفات 4 بايت، كما يلي:

حجم مصفوفة البكسل=حجم الصف|ارتفاع الصورة|{\displaystyle {\text{PixelArraySize}}={\text{RowSize}}\cdot |{\text{ImageHeight}}|}

يُعبّر عن ارتفاع الصورة بالبكسل. القيمة المطلقة ضرورية لأن ارتفاع الصورة يُعبّر عنه كرقم سالب للصور الملتقطة من أعلى إلى أسفل.

مصفوفة البكسل (بيانات الصورة النقطية)

مصفوفة البكسل عبارة عن كتلة من قيم DWORD ذات 32 بت، تصف الصورة بكسلًا بكسلًا. عادةً ما تُخزَّن البكسلات "من الأسفل إلى الأعلى"، بدءًا من الزاوية السفلية اليسرى، مرورًا باليسار إلى اليمين، ثم صفًا تلو الآخر من أسفل الصورة إلى أعلاها. [ 5 ] ما لم يُستخدم BITMAPCOREHEADER ، يمكن أيضًا تخزين صور Windows النقطية غير المضغوطة من الأعلى إلى الأسفل، عندما تكون قيمة ارتفاع الصورة سالبة.

في نظام التشغيل OS/2 DIB الأصلي، كانت القيم الأربع المسموح بها لعمق اللون هي 1 و4 و8 و24 بت لكل بكسل. [ 5 ] تسمح رؤوس DIB الحديثة بتنسيقات بكسل ذات 1 و2 و4 و8 و16 و24 و32 بت لكل بكسل. [ 19 ] كما يسمح GDI+ بـ 64 بت لكل بكسل. [ 20 ]

يجب إضافة بايتات حشو (ليس بالضرورة صفرًا) إلى نهاية الصفوف لزيادة طولها إلى مضاعفات العدد 4 بايت. عند تحميل مصفوفة البكسل في الذاكرة، يجب أن يبدأ كل صف من عنوان ذاكرة من مضاعفات العدد 4. هذا القيد على العنوان/الإزاحة إلزامي فقط لمصفوفات البكسل المحملة في الذاكرة. لأغراض تخزين الملفات، يجب أن يكون حجم كل صف من مضاعفات العدد 4 بايت، بينما يمكن أن تكون إزاحة الملف اختيارية. [ 5 ] تحتوي خريطة بتية 24 بت بعرض 1 على 3 بايتات من البيانات لكل صف (أزرق، أخضر، أحمر) وبايت واحد للحشو، بينما تحتوي الخريطة بعرض 2 على 6 بايتات من البيانات وبايتين للحشو، وتحتوي الخريطة بعرض 3 على 9 بايتات من البيانات و3 بايتات للحشو، وتحتوي الخريطة بعرض 4 على 12 بايت من البيانات بدون حشو.

ضغط

تنسيق البكسل

  • يدعم تنسيق البت الواحد لكل بكسل (1bpp) لونين مختلفين (على سبيل المثال: الأسود والأبيض). تُخزَّن قيم البكسل في كل بت، حيث يكون البكسل الأول (الأيسر) في البت الأكثر أهمية من البايت الأول. [ 5 ] يُمثِّل كل بت فهرسًا في جدول لونين. يشير البت غير المُعيَّن إلى أول مدخل في جدول الألوان، بينما يشير البت المُعيَّن إلى آخر مدخل (ثاني) في جدول الألوان.
  • يدعم تنسيق 2 بت لكل بكسل (2bpp) أربعة ألوان مميزة ويخزن 4 بكسلات لكل بايت واحد، حيث يكون البكسل الأيسر في البتتين الأكثر أهمية (خاص بنظام Windows CE فقط: [ 21 ] ). تمثل قيمة كل بكسل فهرسًا ثنائي البت في جدول يصل إلى 4 ألوان.
  • يدعم تنسيق 4 بت لكل بكسل (4bpp) 16 لونًا مميزًا ويخزن بكسلين لكل بايت واحد، حيث يكون البكسل الأيسر في النصف الأكثر أهمية . [ 5 ] كل قيمة بكسل هي فهرس 4 بت في جدول يصل إلى 16 لونًا.
  • يدعم تنسيق 8 بت لكل بكسل (8bpp) 256 لونًا مميزًا ويخزن بكسلًا واحدًا لكل بايت. كل بايت هو فهرس في جدول يصل إلى 256 لونًا.
  • يدعم تنسيق 16 بت لكل بكسل (16bpp) 65536 لونًا مميزًا ويخزن بكسلًا واحدًا لكل كلمة (WORD) مكونة من بايتين. يمكن لكل كلمة (WORD) تحديد عينات ألفا والأحمر والأخضر والأزرق للبكسل.
  • يدعم تنسيق 24 بت لكل بكسل (24bpp) 16,777,216 لونًا مميزًا، ويخزن قيمة بكسل واحدة لكل 3 بايتات. تحدد كل قيمة بكسل عينات اللون الأحمر والأخضر والأزرق للبكسل (8.8.8.0.0 في ترميز RGBAX). تحديدًا، بالترتيب: الأزرق، ثم الأخضر، ثم الأحمر (8 بتات لكل عينة). [ 5 ]
  • يدعم تنسيق 32 بت لكل بكسل (32bpp) 4,294,967,296 لونًا مميزًا، ويخزن بكسلًا واحدًا في كل قيمة DWORD بحجم 4 بايت. يمكن لكل قيمة DWORD تحديد عينات ألفا والأحمر والأخضر والأزرق للبكسل.

لحلّ الغموض المتعلق بتحديد البتات المسؤولة عن كل عينة، توفر رؤوس DIB قيمًا افتراضية معينة بالإضافة إلى حقول بت محددة، وهي عبارة عن أقنعة بت تحدد انتماء مجموعة معينة من البتات في بكسل إلى قناة معينة . يوضح الرسم التخطيطي التالي هذه الآلية:

الشكل 2 - آلية حقول البتات لبكسل 32 بت موضحة في تدوين طول العينة RGBAX
الشكل 2 - آلية BITFIELDS لبكسل 32 بت موضحة في تدوين طول العينة RGBAX

يجب أن تكون حقول العينة المُعرَّفة بواسطة أقنعة بت BITFIELDS متجاورة وغير متداخلة، ولكن ترتيب حقول العينة اختياري. الترتيب الأكثر شيوعًا هو: ألفا، أزرق، أخضر، أحمر (من البت الأكثر أهمية إلى البت الأقل أهمية). أقنعة البت الأحمر والأخضر والأزرق صالحة فقط عندما يكون عنصر الضغط في رأس DIB مُعيَّنًا على BI_BITFIELDS. قناع البت ألفا صالح كلما كان موجودًا في رأس DIB أو عندما يكون عنصر الضغط في رأس DIB مُعيَّنًا على BI_ALPHABITFIELDS [ 14 ] ( خاص بنظام Windows CE فقط).

الشكل 3 - تنسيق البكسل مع قناة ألفا لبكسل 16 بت (في تدوين طول عينة RGBAX) الذي تم إنشاؤه فعليًا بواسطة Adobe Photoshop
الشكل 3 - تنسيق البكسل مع قناة ألفا لبكسل 16 بت (في تدوين طول العينة RGBAX) الذي تم إنشاؤه فعليًا بواسطة Adobe Photoshop [ 22 ]
جميع تنسيقات البكسل الممكنة في ملف DIB
جميع تنسيقات البكسل الممكنة في ملف DIB

أنواع فرعية لفيديو RGB

تسمح آلية BITFELD الموضحة أعلاه بتعريف عشرات الآلاف من تنسيقات البكسل المختلفة، ولكن لا يتم استخدام سوى عدد قليل منها عمليًا، [ 22 ] جميع التنسيقات ذات الألوان المحددة RGB8 وRGB4 وRGB1 (المميزة باللون الأصفر في الجدول أعلاه، والمحددة في dshow.hأسماء .MEDIASUBTYPE):

أنواع فرعية لفيديو RGB غير المضغوط [ 23 ]
RGBAXالنمط الفرعي RGBRGBAXالنمط الفرعي ARGB
8.8.8.0.8RGB328.8.8.8.0ARGB32
10.10.10.2.0A2R10G10B10
8.8.8.0.0RGB2410.10.10.2.0A2B10G10R10
5.6.5.0.0RGB5654.4.4.4.0ARGB4444
5.5.5.0.1RGB5555.5.5.1.0ARGB1555
حقول البت لعشرة بتات RGB [ 23 ]
بتفيلدإزاحة

(عرافة)

البتات A2R10G10B10البتات A2B10G10R10
أحمر3600 00 F0 3FLE:3FF0000020...29FF 03 00 00LE:000003FF 0... 9
أخضر00 FC 0F 00LE:000FFC0010...1900 FC 0F 00LE:000FFC0010...19
أزرق3EFF 03 00 00LE:000003FF 0... 900 00 F0 3FLE:3FF0000020...29
ألفا4200 00 00 C0LE:C000000030...3100 00 00 C0LE:C000000030...31

في الإصدار 2.1.4، دعم برنامج FFmpeg (بحسب مصطلحاته الخاصة) تنسيقات بكسل BMP التالية: bgra، bgr24، rgb565le، rgb555le، rgb444le، rgb8، bgr8، rgb4_byte، bgr4_byte، gray، pal8، و monob ؛ أي أن bgra كان تنسيق البكسل الوحيد المدعوم مع خاصية الشفافية. [ 24 ]

مثال 1 لصورة نقطية بحجم 2×2 بكسل، مع ترميز 24 بت/بكسل

المثال 1

فيما يلي مثال على صورة نقطية بحجم 2×2 بكسل، 24 بت (رأس DIB لنظام التشغيل Windows BITMAPINFOHEADER ) بتنسيق بكسل RGB24.

إزاحة

(عرافة)

مقاس

(بايت)

القيمة السداسية عشريةقيمةوصف
رأس ملف BMP
٠٠242 4D"BM"حقل المعرف ( 42 4D)
02446  00  00  0070 بايت (54+16)حجم ملف BMP (54 بايت للرأس + 16 بايت للبيانات)
062٠٠ ٠٠غير مستخدمخاص بالتطبيق
082٠٠ ٠٠غير مستخدمخاص بالتطبيق
0A436 00 00 0054 بايت (14+40)الإزاحة التي يمكن من خلالها العثور على مصفوفة البكسل (بيانات الصورة النقطية)
رأس DIB
0E428 00 00 0040 بايتعدد البايتات في رأس DIB (من هذه النقطة)
12402 00 00 002 بكسل (من اليسار إلى اليمين)عرض الصورة النقطية بالبكسل
16402 00 00 002 بكسل (من الأسفل إلى الأعلى)ارتفاع الصورة النقطية بالبكسل. القيمة الموجبة تعني ترتيب البكسلات من الأسفل إلى الأعلى.
201 00طائرة واحدةعدد مستويات الألوان المستخدمة
1C218 0024 بتعدد البتات لكل بكسل
1E4٠٠ ٠٠ ٠٠ ٠٠0BI_RGB، لم يتم استخدام ضغط مصفوفة البكسل
22410 00 00 0016 بايتحجم بيانات الصورة النقطية الخام (بما في ذلك الحشو)
26413 0B 00 002835 بكسل/متر أفقيدقة طباعة الصورة، 72 نقطة في البوصة × 39.3701 بوصة لكل متر، تساوي 2834.6472
413 0B 00 002835 بكسل/متر عمودي
2E4٠٠ ٠٠ ٠٠ ٠٠صفر ألوانعدد الألوان في لوحة الألوان
324٠٠ ٠٠ ٠٠ ٠٠لا توجد ألوان مهمةالصفر يعني أن جميع الألوان مهمة
بداية مصفوفة البكسل (بيانات الصورة النقطية)
363٠٠ ٠٠ FF0 0 255أحمر، بكسل (س=0، ص=1)
393FF FF FF255 255 255أبيض، بكسل (س=1، ص=1)
3C2٠٠ ٠٠0 0حشو لمحاذاة 4 بايت (قد تكون قيمة أخرى غير الصفر)
3E3FF 00 00255 0 0أزرق، بكسل (س=0، ص=0)
41300 FF 000 255 0أخضر، بكسل (س=1، ص=0)
442٠٠ ٠٠0 0حشو لمحاذاة 4 بايت (قد تكون قيمة أخرى غير الصفر)
0,0: blue 0000FF FF0,1: green 00FF00 FF0,2: red FF00000 FF0,3: white FFFFFF FF1,0: blue 0000FF 7F, half transparent1,1: green 00FF00 7F, half transparent1,2: red FF0000 7F, half transparent1,3: white FFFFFF 7F, half transparent
مثال 2 لصورة نقطية بحجم 4×2 بكسل، مع ترميز 32 بت/بكسل

المثال 2

فيما يلي مثال على صورة نقطية بحجم 4×2 بكسل، 32 بت مع قيم الشفافية في قناة ألفا (رأس DIB لنظام التشغيل Windows BITMAPV4HEADER ) بتنسيق بكسل ARGB32.

إزاحة

(عرافة)

مقاس

(بايت)

القيمة السداسية عشريةقيمةوصف
رأس ملف BMP
٠٠242 4D"BM"حقل المعرف (42 ساعة، 4 ساعات)
0249A 00 00 00154 بايت (122+32)حجم ملف BMP
062٠٠ ٠٠غير مستخدمخاص بالتطبيق
082٠٠ ٠٠غير مستخدمخاص بالتطبيق
0A47A 00 00 00122 بايت (14+108)الإزاحة التي يمكن من خلالها العثور على مصفوفة البكسل (بيانات الصورة النقطية)
رأس DIB
0E46C 00 00 00108 بايتعدد البايتات في رأس DIB (من هذه النقطة)
12404 00 00 004 بكسل (من اليسار إلى اليمين)عرض الصورة النقطية بالبكسل
16402 00 00 002 بكسل (من الأسفل إلى الأعلى)ارتفاع الصورة النقطية بالبكسل
201 00طائرة واحدةعدد مستويات الألوان المستخدمة
1C220 0032 بتعدد البتات لكل بكسل
1E403 00 00 003BI_BITFIELDS، لم يتم استخدام ضغط مصفوفة البكسل
22420 00 00 0032 بايتحجم بيانات الصورة النقطية الخام (بما في ذلك الحشو)
26413 0B 00 002835 بكسل/متر أفقيدقة طباعة الصورة، 72 نقطة في البوصة × 39.3701 بوصة لكل متر، تساوي 2834.6472
413 0B 00 002835 بكسل/متر عمودي
2E4٠٠ ٠٠ ٠٠ ٠٠صفر ألوانعدد الألوان في لوحة الألوان
324٠٠ ٠٠ ٠٠ ٠٠لا توجد ألوان مهمةالصفر يعني أن جميع الألوان مهمة
364٠٠ ٠٠ FF ٠٠00FF0000 بنظام big-endianقناع بت القناة الحمراء (صالح لأن BI_BITFIELDS محدد)
400 FF 00 000000FF00 بنظام بيج-إنديانقناع بت القناة الخضراء (صالح لأن BI_BITFIELDS محدد)
3E4FF 00 00 00000000FF بنظام big-endianقناع بت القناة الزرقاء (صالح لأن BI_BITFIELDS محدد)
424٠٠ ٠٠ ٠٠ FFFF000000 بنظام big-endianقناع بت قناة ألفا
46420 6E 69 57ترتيب البايتات الصغير " Win "LCS_WINDOWS_COLOR_SPACE
36٠٠...٠٠نقاط نهاية مساحة الألوان CIEEXYZTRIPLEغير مستخدم لـ LCS " Win " أو " sRGB"
6E4٠٠ ٠٠ ٠٠ ٠٠0 جاما أحمرغير مستخدم لـ LCS " Win " أو " sRGB"
724٠٠ ٠٠ ٠٠ ٠٠0 جاما الأخضرغير مستخدم لـ LCS " Win " أو " sRGB"
764٠٠ ٠٠ ٠٠ ٠٠0 غاما الأزرقغير مستخدم لـ LCS " Win " أو " sRGB"
بداية مصفوفة البكسل (بيانات الصورة النقطية)
4FF 00 00 7F255 0 0 127أزرق (ألفا: 127)، بكسل (س=0، ص=1)
7E400 FF 00 7F0 255 0 127أخضر (ألفا: 127)، بكسل (س=1، ص=1)
82400 00 FF 7F0 0 255 127أحمر (ألفا: 127)، بكسل (س=2، ص=1)
864FF FF FF 7F255 255 255 127أبيض (ألفا: 127)، بكسل (س=3، ص=1)
4FF 00 00 FF255 0 0 255أزرق (ألفا: 255)، بكسل (س=0، ص=0)
8E400 FF 00 FF0 255 0 255أخضر (ألفا: 255)، بكسل (س=1، ص=0)
924٠٠ ٠٠ FF FF0 0 255 255أحمر (ألفا: 255)، بكسل (س=2، ص=0)
964FF FF FF FF255 255 255 255أبيض (ألفا: 255)، بكسل (س=3، ص=0)

لاحظ أن بيانات الصورة النقطية تبدأ من الزاوية السفلية اليسرى للصورة.

استخدام تنسيق BMP

إن بساطة تنسيق ملفات BMP، وانتشاره الواسع في نظام التشغيل ويندوز وغيره، بالإضافة إلى كونه موثقًا بشكل جيد نسبيًا ومفتوح المصدر ، تجعله تنسيقًا شائعًا جدًا يمكن لبرامج معالجة الصور من أنظمة تشغيل متعددة قراءته وكتابته. تحتوي ملفات ICO وCUR على صور نقطية تبدأ بـ BITMAPINFOHEADER.

استخدمت العديد من واجهات المستخدم الرسومية القديمة الصور النقطية في أنظمة الرسومات الفرعية المدمجة بها؛ [ 25 ] على سبيل المثال، نظام GDI الفرعي لمنصات Microsoft Windows و OS/2 ، حيث يكون التنسيق المحدد المستخدم هو تنسيق ملف الصور النقطية لنظامي Windows و OS/2 ، والذي عادة ما يكون اسمه بامتداد الملف.BMP . [ 26 ]

على الرغم من أن معظم ملفات BMP تتميز بحجم كبير نسبيًا نظرًا لعدم وجود أي ضغط (أو استخدام ترميز طول التشغيل بنسبة منخفضة عمومًا على الصور المُجمّعة)، إلا أنه يمكن ضغط العديد من ملفات BMP بشكل كبير باستخدام خوارزميات ضغط البيانات غير الفاقد للبيانات مثل ZIP لاحتوائها على بيانات زائدة. بل إن بعض التنسيقات، مثل RAR ، تتضمن إجراءات مُخصصة لضغط هذه البيانات بكفاءة.

يستخدم نظام X Window تنسيق XBM مشابهًا للصور بالأبيض والأسود، وتنسيق XPM ( خريطة البكسل ) للصور الملونة. كما توجد مجموعة متنوعة من تنسيقات "الخام"، التي تحفظ البيانات الخام دون أي معلومات أخرى. وتوجد أيضًا تنسيقات Portable Pixmap (PPM) و Truevision TGA ، ولكنها أقل استخدامًا  ، أو تُستخدم لأغراض خاصة فقط؛ فعلى سبيل المثال، يمكن أن يحتوي تنسيق TGA على معلومات الشفافية.

مراجع

  1. "اعتبارات IANA" . أنواع وسائط صور ويندوز . IETF . القسم  5. doi : 10.17487/RFC7903 . RFC 7903 .
  2. 1 2 3 جيمس د. موراي؛ ويليام فان رايبر (أبريل 1996). موسوعة تنسيقات ملفات الرسومات (الطبعة الثانية ). أورايلي . bmp . ISBN  1-56592-161-5تم الاطلاع عليه بتاريخ 2014-03-07 .
  3. 1 2 3 4 5 6 7 8 جيمس د. موراي؛ ويليام فان رايبر (أبريل 1996). موسوعة تنسيقات ملفات الرسومات (الطبعة الثانية ). أورايلي . os2bmp . ISBN  1-56592-161-5تم الاطلاع عليه بتاريخ 2014-03-07 .
  4. 1 2 "[MS-WMF]: تنسيق ملفات تعريف ويندوز" . MSDN . 2014-02-13 . تم الاسترجاع في 2014-03-12 .
  5. 1 2 3 4 5 6 7 8 9 10 "ملفات DIB واستخداماتها" . مساعدة ودعم مايكروسوفت . تم الاطلاع عليه بتاريخ 14-05-2015 .
  6. 1 2 3 أنواع رؤوس الصور النقطية في MSDN
  7. 1 2 3 بنية MSDN
  8. فينغ يوان - برمجة الرسومات في ويندوز: Win32 GDI و DirectDraw: Packed Device-Independent Bitmap (CreateDIBPatternBrush, CreateDIBPatternBrushPt, FindResource, LoadResource, LockResource)
  9. سامرز، جيسون (30-10-2015). "pal8os2v2-16.bmp" . تم الاسترجاع في 6-7-2016 .
  10. سامرز، جيسون (30-10-2015). "مجموعة برامج BMP" . تم الاسترجاع في 6-7-2016 .
  11. كوكس، كريس (15 نوفمبر 2010). "تنسيق BMP غير صالح مع قناة ألفا" . منتدى فوتوشوب ويندوز . أدوبي . مؤرشف من الأصل في 27 يناير 2015. تم الاطلاع عليه في 22 مايو 2016 .
  12. "Microsoft Windows Bitmap: ملخص من موسوعة تنسيقات ملفات الرسومات" .
  13. 1 2 "امتدادات JPEG و PNG لوظائف وهياكل الصور النقطية المحددة" .
  14. 1 2 MSDN - BITMAPINFOHEADER (Windows CE 5.0): BI_ALPHABITFIELDS في عنصر biCompression
  15. MSDN – BITMAPV4HEADER : العنصر bV4AlphaMask
  16. MSDN – RGBQUAD: عضو محجوز في rgb
  17. انظر الملاحظة تحت biClrUsed MSDN BITMAPINFOHEADER
  18. "Image Stride - تطبيقات Win32" . learn.microsoft.com .
  19. MSDN - BITMAPINFOHEADER : العضو biBitCount
  20. "أنواع الصور النقطية" . MSDN . 2012-06-03 . تم الاطلاع عليه بتاريخ 2014-03-16 .
  21. MSDN: Windows CE - بنية BITMAPINFOHEADER
  22. 1 2 أدوبي فوتوشوب: صيغة BMP، مؤرشفة بتاريخ 22-09-2011 في أرشيف الإنترنت (Wayback Machine).
  23. 1 2 "أنواع فرعية لفيديو RGB غير المضغوط" . dshow.h . MSDN . تم الاسترجاع في 11-03-2014 .
  24. "تنسيقات الصور" . وثائق FFmpeg العامة . 2014. تم الاطلاع عليه بتاريخ 23-02-2014 .
  25. جوليان سمارت؛ ستيفان تشومور وكيفن هوك (2006). برمجة واجهات المستخدم الرسومية متعددة المنصات باستخدام Wxwidgets . برنتيس هول. ISBN 0-13-147381-6.
  26. "ملف صورة نقطية (BMP)، الإصدار 5" . الحفظ الرقمي . مكتبة الكونغرس . 2014-01-08 . تاريخ الاسترجاع 2014-03-11 .