מהו קובץ BMP?
קבצים בעלי סיומת .BMP מייצגים קובצי Bitmap Image המשמשים לאחסון תמונות דיגיטליות של Bitmap. תמונות אלו אינן תלויות במתאם הגרפי והן נקראות גם פורמט קובץ מפת סיביות עצמאית של מכשירים (DIB). עצמאות זו משרתת את המטרה של פתיחת הקובץ בפלטפורמות מרובות כגון Microsoft Windows ו-Mac. פורמט הקובץ BMP יכול לאחסן נתונים כתמונות דיגיטליות דו מימדיות בפורמט מונוכרום וגם בפורמט צבעוני עם עומקי צבע שונים.
מפרטי פורמט קובץ BMP
מפות סיביות בלתי תלויות בהתקן פועלות ככלי עזר להחלפת מפות סיביות בין מכשירים ויישומים. בשל ההתפתחות המתמשכת של פורמט קובץ זה, המידע הכלול בכותרות יכול להיות שונה בהתאם לגרסה של Bitmap. קובץ מפת סיביות בודד מורכב ממבנים קבועים כמו גם מבנים בגודל משתנה ברצף ספציפי.
מבנים בקובץ Bitmap מסודרים בסדר הבא:
מבנה | אופציונלי | גודל | מטרה |
---|---|---|---|
כותרת קובץ | No | 14 | לאחסון מידע כללי על קובץ תמונת הסיביות |
DIB Header | No | Fixed-Size | לאחסון מידע מפורט על תמונת הסיביות ולהגדיר את פורמט הפיקסלים |
מסיכות סיביות נוספות | כן | 12 או 16 בתים | כדי להגדיר את פורמט הפיקסלים |
פלטת צבעים | חצי אופציונלי | משתנה-גודל | כדי להגדיר צבעים המשמשים את נתוני תמונת הסיביות |
Gap1 | כן | גודל משתנה | יישור מבנה |
מערך פיקסלים | לא | גודל-משתנה | פורמט פיקסלים מוגדר על ידי כותרת DIB או מסיכות סיביות נוספות. |
Gap2 | כן | גודל משתנה | יישור מבנה |
ICC פרופיל צבע | כן | גודל משתנה | כדי להגדיר את פרופיל הצבע לניהול צבעים |
כאשר תמונת מפת סיביות נטענת לזיכרון, היא הופכת למבנה DIB, המשמש את Windows באמצעות ה-GDI API שלה. כותרת הקובץ אינה חלק ממבנה הנתונים הזה. הצבע יכול להכיל גם ערכים של 16 סיביות המהווים אינדקסים ללוח ההתייחסות הנוכחי במקום הגדרות צבע RGB מפורשות. בואו נסתכל על כמה מהם בפירוט, במיוחד הכותרות.
כותרת קובץ מפת סיביות
כותרת קובץ Bitmap דומה לכותרות קבצים אחרות המשמשות לזיהוי הקובץ. מכיוון שישנן גרסאות שונות לפורמט קובץ BMP, 2 הבייטים הראשונים של פורמט הקובץ BMP הם התו “B” ולאחר מכן התו “M” בקידוד ASCII. כל ערכי המספרים השלמים מאוחסנים בפורמט אנדיאן קטן.
offset hex | offset dec | גודל | מטרה |
---|---|---|---|
00 | 0 | 2 בתים | שדה הכותרת המשמש לזיהוי קובץ ה-BMP וה-DIB הוא 0x42 0x4D בהקסדצימלי, זהה ל-BM ב-ASCII. זה יכול לעקוב אחר ערכים אפשריים.* BM – Windows 3.1x, 95, NT, … וכו’. * BA – OS/2 struct bitmap מערך * CI – OS/2 struct סמל צבע * CP - מצביע צבע קונסט של OS/2 * IC - סמל מבנה OS/2 * PT - מצביע OS/2 |
02 | 2 | 4 בתים | גודל קובץ ה-BMP בבתים |
06 | 6 | 2 בתים | שמורה; הערך בפועל תלוי באפליקציה שיוצרת את התמונה |
08 | 8 | 2 בתים | שמורה; הערך בפועל תלוי באפליקציה שיוצרת את התמונה |
0A | 10 | 4 בתים | ההיסט, כלומר כתובת ההתחלה, של הבית שבו ניתן למצוא את נתוני תמונת הסיביות (מערך הפיקסלים). |
כותרת DIB (כותרת מידע מפת סיביות)
המידע המפורט על התמונה מיוצג על ידי כותרת זו. על סמך מידע זה, ייקבע אפליקציה שתשמש להצגת התמונה על המסך. כל הכותרות הללו מכילות שדה DWORD (32 סיביות), המציין את גודלן, כך שאפליקציה יכולה לקבוע בקלות את הכותרת שבה נעשה שימוש בתמונה. זה בעצם נובע מהעובדה שפורמט DIB עבר מספר הרחבות. להלן כותרת DIB עם שדות רשומים.
פלטת צבעים
פלטת צבעים BMP היא מערך של מבנים המציינים את ערכי עוצמת ה-RGB של כל צבע בפלטת הצבעים של התקן תצוגה. כל פיקסל בנתוני מפת הסיביות מאחסן ערך בודד המשמש כאינדקס בפלטת הצבעים. מידע הצבע המאוחסן באלמנט באותו אינדקס מציין את הצבע של אותו פיקסל. זמינות הצבע בקובץ מפת סיביות משתנה כדלקמן:
- One, 4 ו-8-bit - צפוי להכיל תמיד פלטת צבעים
- 16, 24 ו-32 סיביות - לעולם אל תכיל פלטות צבעים
- 16 קבצי BMP ו-32 סיביות - מכילים ערכי מסיכת שדה סיביות במקום פלטת הצבעים
אחסון פיקסלים
פיקסלים של מפת סיביות מאוחסנים כסיביות ארוזות בשורות כאשר הגודל של כל שורה מעוגל כלפי מעלה לכפולה של 4 בתים (DWORD של 32 סיביות) על ידי ריפוד. לא ניתן לחשב ישירות את הכמות הכוללת של בתים הנדרשת לאחסון הפיקסלים של תמונה רק על ידי ספירת הביטים. מכיוון שיש ריפוד מעורב, נדרשת ההשפעה של עיגול כלפי מעלה את הגודל של כל שורה לכפולה של 4 בתים. יש לצרף בתים ריפוד (לאו דווקא 0) לסוף השורות כדי להעלות את אורך השורות לכפולה של ארבעה בתים. כאשר מערך הפיקסלים נטען לזיכרון, כל שורה חייבת להתחיל בכתובת זיכרון שהיא כפולה של 4.
התמונה מתוארת למעשה על ידי ייצוג 32 סיביות DWORDs של מערך הפיקסלים. בדרך כלל פיקסלים מאוחסנים “מלמטה למעלה”, מתחילים בפינה השמאלית התחתונה, עוברים משמאל לימין, ואז שורה אחר שורה מלמטה לחלק העליון של התמונה. פורמטים של Pixel וההשלכות שלהם הם כמפורט להלן:
- הפורמט של 1 סיביות לפיקסל (1bpp) תומך בשני צבעים שונים, (לדוגמה: שחור ולבן).
- פורמט ה-2 סיביות לפיקסל (2bpp) תומך ב-4 צבעים נפרדים ומאחסן 4 פיקסלים לבייט אחד, הפיקסל השמאלי ביותר נמצא בשני הביטים המשמעותיים ביותר. כל ערך פיקסל הוא אינדקס של 2 סיביות לטבלה של עד 4 צבעים.
- הפורמט של 4 סיביות לפיקסל (4bpp) תומך ב-16 צבעים נפרדים ומאחסן 2 פיקסלים לבייט אחד, הפיקסל השמאלי ביותר נמצא בנגיסה המשמעותית יותר. כל ערך פיקסל הוא אינדקס של 4 סיביות לטבלה של עד 16 צבעים.
- הפורמט של 8 סיביות לפיקסל (8bpp) תומך ב-256 צבעים שונים ומאחסן פיקסל אחד לכל בת אחד. כל בייט הוא אינדקס לטבלה של עד 256 צבעים.
- פורמט 16 סיביות לפיקסל (16bpp) תומך ב-65536 צבעים שונים ומאחסן פיקסל אחד לכל WORD של 2 בייט. כל מילה יכולה להגדיר את דגימות האלפא, האדום, הירוק והכחול של הפיקסל.
- פורמט 24 סיביות פיקסל (24bpp) תומך ב-16,777,216 צבעים שונים ומאחסן ערך פיקסל אחד לכל 3 בתים. כל ערך פיקסל מגדיר את הדגימות האדומות, הירוקות והכחולות של הפיקסל (8.8.8.0.0 בסימון RGBAX). ספציפית, לפי הסדר: כחול, ירוק ואדום (8 ביטים לכל דגימה).
- פורמט ה-32 סיביות לפיקסל (32bpp) תומך ב-4,294,967,296 צבעים שונים ומאחסן פיקסל אחד לכל DWORD של 4 בייט. כל DWORD יכול להגדיר את דגימות האלפא, האדום, הירוק והכחול של הפיקסל.