الإجابة المختصرة

قد تبدأ صفوف بكسلات BMP من الأسفل أو من الأعلى. افحص الارتفاع الموقّع والرأس، واستخدم عينة واضحة الاتجاه، ثم تحقق من PNG وJPG بدلاً من إخفاء خلل فك الترميز بقلب الصورة يدوياً.

جرّب الأدوات

BMP → PNG

فتح الأداة

التعرّف إلى اتجاهي صفوف BMP

لا تُخزّن بيانات الصورة النقطية المستقلة عن الجهاز في Windows دائماً بدءاً من الصف المرئي العلوي وصولاً إلى الصف السفلي. في حالة شائعة من BITMAPINFOHEADER يصف الارتفاع الموجب صورة bottom-up تبدأ مصفوفة بكسلاتها بالصف الذي سيظهر في الأسفل. ويمكن للارتفاع السالب أن يصف صورة top-down تبدأ مصفوفتها بالصف العلوي. على وحدة فك الترميز تفسير الإشارة وربط ترتيب التخزين بإحداثيات العرض. وإذا تعاملت مع كل مصفوفة على أنها top-down فقد تظهر النتيجة مقلوبة رأسياً.

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

  • فحص إشارة الارتفاع
  • استخدام هدف غير متناظر
  • مقارنة عدة وحدات فك BMP

قد تنقل إشارة الارتفاع اتجاه الصفوف، لا العدد المطلق للبكسلات فقط.

فصل ترتيب الصفوف عن مشكلات الاتجاه الأخرى

يختلف القلب الرأسي الناتج من ترتيب الصفوف عن دوران الكاميرا أو مشكلة Exif Orientation. لذلك لا تشخّص مسار BMP كما لو كان مسار JPEG. إذا ظل النص مقروءاً من اليسار إلى اليمين لكن الأعلى والأسفل تبادلا موضعيهما، فابدأ بفحص ترتيب الصفوف. أما دوران تسعين درجة أو الانعكاس الأفقي أو التحويل المركب فيشير غالباً إلى برنامج الالتقاط أو تحويل سابق أو عملية إضافية وقت العرض. هذا التفريق يمنع إصلاح العرض وترك سبب الخطأ في مرحلة أخرى.

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

  • تمييز القلب عن الدوران
  • تتبّع كل مرحلة
  • مقارنة الرأس السليم والمعيب

فحص حشو الصفوف وإزاحة البكسلات

قد تتضمن scanlines في BMP بايتات حشو لتحقيق المحاذاة. إذا انتقلت وحدة فك الترميز بعدد بايتات البكسلات المرئية فقط بدلاً من طول الصف الكامل بعد الحشو، فقد يظهر انزياح قطري أو أشرطة ملونة أو صفوف مبتورة بدلاً من قلب رأسي نظيف. افحص الإزاحة إلى بيانات البكسلات وعمق البت والعرض وحساب عدد البايتات لكل صف. واختبر عروضاً لا تقع تلقائياً على حد التخزين، لأنها تكشف أخطاء الحشو بصورة أوضح من الأبعاد المريحة والمتوافقة مسبقاً.

تضيف صور BMP ذات لوحة الألوان أو الضغط شروطاً أخرى. نجاح عينة واحدة غير مضغوطة بعمق 24 بت لا يثبت دعم كل الأنواع. إذا كانت المدخلات الفعلية تشمل لوحات 1 أو 4 أو 8 بت، أو بكسلات 16 أو 32 بت، أو قنوات شبيهة بألفا، أو ضغطاً، فاختبر كل فئة مستخدمة. لا تخمّن موضعاً جديداً للرأس ولا تعدّل البايتات مباشرة. احفظ المصدر، وفكّه بتطبيق متوافق، ثم اكتب خرجاً قياسياً جديداً. وإذا تغيّر العيب بمجرد زيادة العرض بكسلاً واحداً فراجع stride والمحاذاة أولاً.

  • حساب طول الصف بعد الحشو
  • اختبار عروض غير ملائمة
  • تغطية الأعماق واللوحات الفعلية

غالباً ما يدل الانزياح القطري أو الصف الملون على خطأ حشو أو إزاحة، لا على ترتيب معكوس فقط.

مقارنة PNG وJPG وفق الاستخدام المقصود

يمنح تحويل BMP إلى PNG مرجعاً بلا فقد مناسباً لفحص الاتجاه والحواف الحادة والألوان الدقيقة. أما JPG فيضيف ضغطاً بفقد ولا يملك قناة ألفا، ولذلك يقل ملاءمته لتشخيص النص الصغير أو بكسلات الحدود. تحقق من PNG أولاً. ولا تنشئ JPG إلا إذا احتاجته الوجهة، وتعامل مع جودة JPEG وتقليل عينات اللون وتركيب الخلفية بوصفها قرارات منفصلة عن ترتيب الصفوف. بهذه الطريقة لا تختلط آثار الضغط مع خلل القراءة الأصلي.

اعرض BMP وPNG وJPG بالأبعاد الظاهرة نفسها، وقارن الزوايا الأربع والصف الأعلى والصف الأسفل وعلامات الاتجاه. لا تكتف بالتأكد من أن الصورة تبدو قائمة؛ ابحث عن صف مفقود أو تغير لون سببه الحشو أو تبدل في الشفافية. إذا صحّح المحوّل مصدراً غير متسق تلقائياً فسجّل ذلك. قد يفسر برنامج آخر المصدر نفسه بصورة مختلفة رغم أن الخرج الأول بدا صحيحاً. افحص العرض بنسبة مئة في المئة أيضاً، لأن المصغرات قد تخفي عيباً بعرض بكسل واحد.

  • استخدام PNG كمرجع
  • مقارنة أول صف وآخر صف
  • توثيق التصحيح التلقائي

اعتماد أنواع BMP ممثلة من البداية إلى النهاية

أنشئ مجموعة اختبار تضم ملفات top-down وbottom-up وعروضاً متعددة وصوراً ذات لوحة ألوان وأنواع 24 أو 32 بت المستخدمة فعلياً. مرّر كل ملف عبر أداة BMP إلى PNG أو BMP إلى JPG الحقيقية، ثم افتح النتائج في التطبيق الهدف وعارض مستقل. أكّد الأعلى والأسفل والأبعاد والألوان وسلوك ألفا واكتمال الصفوف الطرفية. استخدم أسماء ملفات جديدة وسجّل بصمات التحقق حتى لا تستبدل ذاكرة المتصفح أو المزامنة أو شبكة التسليم النتيجة بنسخة قديمة.

دوّن قيم الرأس الأصلية والتطبيق المنشئ وإصدار المحوّل وإعدادات الخرج وبيئة الاختبار. لا تصلح مشتقاً فاشلاً بقلبه والكتابة فوقه؛ ارجع إلى المصدر وفكّه بصورة صحيحة. وفي الفحص العملي الأخير ارفع إلى خدمة التسليم كلاً من الهدف المعلّم وصورة عمل حقيقية، ثم نزّل النسخ التي تقدمها الخدمة وقارن الحواف. لا تبدأ التحويل الدفعي إلا بعد نجاح كل فئة مطلوبة وتأكيد عارض ثانٍ النتيجة نفسها. بذلك لا يتحول إصلاح يدوي مؤقت إلى قاعدة إنتاج خاطئة.

  • اختبار الاتجاهين
  • تجنب المعاينات القديمة
  • فحص الملف المنزّل

يجب أن ينجح هدف الاتجاه وملف BMP حقيقي من الإنتاج قبل تحويل مجلد كامل.

الخلاصة

  • في بنى DIB الشائعة قد يعني الارتفاع الموجب صفوفاً من الأسفل إلى الأعلى، بينما يعني الارتفاع السالب صفوفاً من الأعلى إلى الأسفل.
  • قد تقلب وحدة فك الترميز التي تتجاهل الإشارة الصورة رأسياً أو تعطي نتائج مختلفة بين التطبيقات.
  • تساعد عينة غير متناظرة ذات علامات واضحة مع قيم الرأس على فصل خطأ ترتيب الصفوف عن الدوران أو مشكلة الالتقاط.
  • بعد التحويل يجب فحص الاتجاه والأبعاد والألوان والحشو والصفوف الطرفية داخل نظام الاستلام الفعلي.

الأسئلة الشائعة

لماذا يمكن أن يخزن BMP الصف السفلي أولاً؟

قد تستخدم مخططات DIB التقليدية مصفوفة bottom-up مع ارتفاع موجب، ثم تعيد وحدة فك الترميز بناء الترتيب المرئي من الأعلى إلى الأسفل.

هل يعني ارتفاع BMP السالب دائماً أن الملف تالف؟

لا. في صيغ الرأس المدعومة يمكن أن يشير عمداً إلى صورة top-down.

هل يكفي قلب الصورة المحولة في محرر؟

قد يصلح مظهر ملف واحد، لكنه يترك عدم اتساق المصدر أو وحدة فك الترميز وقد يتكرر الخلل لاحقاً.

هل الانزياح القطري مشكلة في ترتيب الصفوف أيضاً؟

غالباً ما يشير إلى طول صف محشو أو إزاحة بكسلات غير صحيحة، ويجب فحصهما مع العرض وعمق البت.

ما الفحص النهائي للتحويل؟

حوّل هدفاً معلّماً وملف BMP حقيقياً، ثم قارن الاتجاه والصفوف الطرفية والأبعاد والألوان في الملفات المنزلة فعلياً من الخدمة.

المصادر والمراجع

  1. Microsoft Learn — Device-Independent Bitmaps
  2. Microsoft Learn — BITMAPINFOHEADER Structure
  3. Microsoft Learn — BMP Format Overview