फ़ाइल फ़ॉर्मैट
BMP क्या है? बिटमैप फ़ॉर्मैट की पूरी जानकारी
BMP, Windows का बिना कंप्रेशन वाला, लॉसलेस बिटमैप फ़ॉर्मैट है। हम इसकी हेडर संरचना, कलर डेप्थ, सीमाएँ और फ़ाइलों को छोटा करने का तरीक़ा समझाते हैं।
लेखक: Hemen Dönüştür Editör Ekibiप्रकाशित: 9 मिनट में पढ़ें

BMP, Windows की दुनिया के सबसे पुराने और सबसे सरल इमेज फ़ॉर्मैट में से एक है। BMP फ़ाइल आमतौर पर पिक्सेल को बिना किसी कंप्रेशन के, पंक्ति-दर-पंक्ति डिस्क पर लिख देती है। यही सादगी इसे पढ़ने में आसान और लॉसलेस बनाती है, और यही सादगी फ़ाइलों को बहुत भारी भी बना देती है। यह लेख बताता है कि BMP कहाँ से आया, फ़ाइल के अंदर क्या है, कलर डेप्थ और पारदर्शिता की बारीकियाँ क्या हैं, आज भी यह कहाँ मिलता है और BMP फ़ाइलों को ज़्यादा व्यावहारिक फ़ॉर्मैट में कैसे बदलें।
BMP क्या है?
BMP (bitmap, एक्सटेंशन .bmp) एक रास्टर, यानी पिक्सेल-आधारित इमेज फ़ाइल फ़ॉर्मैट है। तकनीकी दस्तावेज़ इसे DIB, यानी device-independent bitmap, भी कहते हैं। "डिवाइस से स्वतंत्र" का मतलब है कि इमेज को उसी तरह समझा जा सकता है, चाहे वह किसी भी ग्राफ़िक्स कार्ड या प्रिंटर पर बनी हो: फ़ाइल अपने रंगों को डिकोड करने के लिए ज़रूरी जानकारी अपने हेडर और कलर टेबल में ख़ुद रखती है।
Microsoft के Win32 दस्तावेज़ों के अनुसार बिटमैप फ़ाइल एक BITMAPFILEHEADER संरचना से शुरू होती है, उसके बाद BITMAPINFOHEADER, BITMAPV4HEADER या BITMAPV5HEADER, फिर एक वैकल्पिक कलर टेबल और आख़िर में पिक्सेल डेटा आता है। MIME टाइप image/bmp है।
संक्षिप्त इतिहास: Windows और OS/2 से आज तक
BMP, 1980 के दशक के अंत में Windows और OS/2 पर Microsoft और IBM के साझा काम से निकला। Windows 1.0 के दौर के बिटमैप आउटपुट डिवाइस पर काफ़ी निर्भर थे; डिवाइस से स्वतंत्र रूप 1990 में Windows 3.0 के साथ आम हुआ। OS/2 Presentation Manager के लिए तय 12-बाइट का BITMAPCOREHEADER ही वह वजह है जिससे लोग आज भी "OS/2 BMP" फ़ाइलों की बात करते हैं।
बरसों में हेडर के अंत में नए फ़ील्ड जोड़कर फ़ॉर्मैट का विस्तार किया गया। Library of Congress के फ़ॉर्मैट विवरण के अनुसार संस्करण 5, 1998 में Windows 98 के साथ आया और इससे फ़ाइल में ICC कलर प्रोफ़ाइल दर्ज करना संभव हुआ। आज के आम हेडर साइज़ ये हैं:
| हेडर | साइज़ | मुख्य जोड़ |
|---|---|---|
| BITMAPCOREHEADER | 12 बाइट | OS/2 1.x के अनुकूल मूल संरचना |
| BITMAPINFOHEADER | 40 बाइट | Windows 3.0 से सबसे आम हेडर; कंप्रेशन और रिज़ॉल्यूशन फ़ील्ड |
| BITMAPV4HEADER | 108 बाइट | कलर मास्क, अल्फ़ा मास्क और कलर स्पेस की जानकारी |
| BITMAPV5HEADER | 124 बाइट | एम्बेड की गई या लिंक की गई ICC प्रोफ़ाइल, रेंडरिंग इंटेंट |
रीडर पहले फ़ील्ड के साइज़ मान से पहचानते हैं कि कौन-सा हेडर इस्तेमाल हो रहा है। इससे पुराने सॉफ़्टवेयर नए फ़ील्ड को नज़रअंदाज़ करके भी बुनियादी जानकारी पढ़ लेते हैं।
BMP फ़ाइल के अंदर
फ़ाइल हेडर और "BM" हस्ताक्षर
हर BMP फ़ाइल 14-बाइट के फ़ाइल हेडर से शुरू होती है, और उसके पहले दो बाइट ASCII अक्षर BM (हेक्स 42 4D) होते हैं। हेडर फ़ाइल का कुल साइज़ और वह बाइट ऑफ़सेट रखता है जहाँ पिक्सेल डेटा शुरू होता है। Windows क्लिपबोर्ड पर रखा DIB (CF_DIB फ़ॉर्मैट) ये 14 बाइट छोड़ देता है और सीधे इन्फ़ो हेडर से शुरू होता है।
इन्फ़ो हेडर
इन्फ़ो हेडर में चौड़ाई, ऊँचाई, हर पिक्सेल के बिट (biBitCount), कंप्रेशन का प्रकार, क्षैतिज और ऊर्ध्वाधर रिज़ॉल्यूशन (पिक्सेल प्रति मीटर में) और कलर टेबल में इस्तेमाल रंगों की संख्या होती है।
कलर टेबल (पैलेट)
8 बिट प्रति पिक्सेल या उससे कम वाली इमेज में पिक्सेल रंग नहीं, बल्कि कलर टेबल का इंडेक्स होता है। Microsoft के दस्तावेज़ी उदाहरण में 16 रंगों वाले 32x32 बिटमैप का पिक्सेल ऐरे 32 x 32 x 4 = 4096 बिट का है, क्योंकि 16 रंगों तक पहुँचने के लिए 4 बिट काफ़ी हैं।
पिक्सेल डेटा: नीचे से ऊपर पंक्तियाँ और 4-बाइट संरेखण
BMP की दो अनोखी आदतें हैं। पहली, अगर ऊँचाई धनात्मक है, तो पंक्तियाँ नीचे से ऊपर रखी जाती हैं: फ़ाइल की पहली पंक्ति तस्वीर की सबसे निचली पंक्ति होती है। ऋणात्मक ऊँचाई पंक्तियों को ऊपर से नीचे रखती है, लेकिन ऐसी इमेज कंप्रेस नहीं की जा सकतीं। दूसरी, हर पंक्ति को 4 बाइट के गुणज तक पैड किया जाता है। Microsoft पंक्ति की लंबाई (stride) ऐसे बताता है:
stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride
24 बिट वाली 1920x1080 इमेज में हर पंक्ति 1920 x 3 = 5,760 बाइट की है (जो पहले से 4 का गुणज है), इसलिए पिक्सेल डेटा 5,760 x 1,080 = 6,220,800 बाइट है। 54-बाइट के हेडर के साथ फ़ाइल लगभग 6.2 MB की होती है। यही तस्वीर JPG के रूप में आमतौर पर इसका छोटा-सा हिस्सा होती है।
कलर डेप्थ, कंप्रेशन और पारदर्शिता
BITMAPV5HEADER के दस्तावेज़ 1, 4, 8, 16, 24 और 32 बिट प्रति पिक्सेल तय करते हैं (0 मान का मतलब है कि डेप्थ एम्बेड किए JPEG या PNG डेटा से आती है)। 1 बिट काला-सफ़ेद है, 4 बिट 16 रंग और 8 बिट 256 रंगों का पैलेट। 24 बिट पर हर पिक्सेल नीले, हरे, लाल क्रम में तीन बाइट का होता है।
कंप्रेशन फ़ील्ड ये मान ले सकता है:
- BI_RGB: बिना कंप्रेशन। व्यवहार में ज़्यादातर BMP फ़ाइलें यही होती हैं।
- BI_RLE8 और BI_RLE4: 8-बिट और 4-बिट पैलेट इमेज के लिए सरल रन-लेंथ एन्कोडिंग। बड़े सपाट हिस्सों के लिए उपयोगी, फ़ोटो के लिए लगभग बेकार।
- BI_BITFIELDS: यह कंप्रेशन नहीं है; मास्क तय करते हैं कि 16-बिट और 32-बिट पिक्सेल में लाल, हरे और नीले बिट कहाँ हैं (जैसे RGB 565)।
- BI_JPEG और BI_PNG: बिटमैप के अंदर JPEG या PNG डेटा की इजाज़त देते हैं। आम व्यूअर इन्हें कम ही सपोर्ट करते हैं।
पारदर्शिता BMP का सबसे असंगत हिस्सा है। V4 और V5 हेडर का अल्फ़ा मास्क 32-बिट पिक्सेल के चौथे बाइट को अपारदर्शिता के रूप में तय कर सकता है, लेकिन क्लासिक 32-बिट BMP में उस बाइट को अप्रयुक्त बताया गया है और कई प्रोग्राम उसे नज़रअंदाज़ कर देते हैं। इसलिए ऐसी 32-बिट BMP जो एक प्रोग्राम में पारदर्शी दिखे और दूसरे में काले बैकग्राउंड पर, कोई अनोखी बात नहीं है। अगर आपको पारदर्शिता चाहिए, तो PNG कहीं ज़्यादा सुरक्षित विकल्प है।
सिस्टम, ब्राउज़र और सॉफ़्टवेयर में सपोर्ट
BMP लगभग हर जगह खुलता है। Windows के बिल्ट-इन व्यूअर और Paint, macOS का Preview और Linux के आम व्यूअर, सभी इसे पढ़ते हैं। MDN की इमेज फ़ॉर्मैट गाइड Chrome, Edge, Firefox, Opera और Safari के सभी संस्करणों में BMP सपोर्ट दर्ज करती है। यही गाइड यह भी ज़ोर देकर कहती है कि बिना कंप्रेशन वाली BMP फ़ाइलें PNG या JPG की तुलना में बहुत बड़ी होती हैं और वेबसाइट की सामग्री के लिए आमतौर पर इनसे बचना चाहिए।
आज BMP कहाँ इस्तेमाल होता है?
- Windows ऐप्लिकेशन के संसाधन और पुराने सॉफ़्टवेयर: टूलबार इमेज, इंस्टॉलर विज़ार्ड के ग्राफ़िक्स और कुछ गेम एसेट आज भी BMP हैं।
- एम्बेडेड सिस्टम और माइक्रोकंट्रोलर: डिस्प्ले वाले डिवाइस को JPEG डिकोडर की ज़रूरत नहीं; पिक्सेल डेटा सीधे स्क्रीन पर कॉपी किया जा सकता है।
- औद्योगिक कैमरे, स्कैनर और टेस्ट टूल: जब कच्चा, लॉसलेस आउटपुट चाहिए, तो BMP एक सरल बीच का फ़ॉर्मैट है।
- पढ़ाई: केवल कुछ दर्जन बाइट के हेडर के कारण BMP अक्सर वह पहला फ़ॉर्मैट होता है जिसे इमेज प्रोसेसिंग कोर्स में छात्र पढ़ते और लिखते हैं।
खूबियाँ और कमज़ोरियाँ
| खूबियाँ | कमज़ोरियाँ |
|---|---|
| लॉसलेस; पिक्सेल मान कभी नहीं बदलते | बिना कंप्रेशन, इसलिए फ़ाइलें बहुत बड़ी |
| पढ़ना-लिखना बेहद आसान, CPU पर कोई बोझ नहीं | पारदर्शिता का असंगत सपोर्ट |
| लगभग हर ऑपरेटिंग सिस्टम और ब्राउज़र में खुलता है | मेटाडेटा (EXIF, विवरण) का कमज़ोर सपोर्ट |
| पैलेट मोड कम संसाधन वाले डिवाइस के लिए ठीक | वेब, ईमेल और अपलोड फ़ॉर्म के लिए अव्यावहारिक |
आम समस्याएँ और उनके हल
फ़ाइल ईमेल या अपलोड फ़ॉर्म के लिए बहुत बड़ी है
यह सबसे आम समस्या है। फ़ोटो और स्कैन के लिए BMP को JPG में बदलना आमतौर पर साइज़ को दस गुना या उससे ज़्यादा घटा देता है। स्क्रीनशॉट, डायग्राम या टेक्स्ट वाली किसी भी चीज़ के लिए BMP को PNG में बदलना बेहतर है: PNG भी लॉसलेस है लेकिन कंप्रेस्ड, और यह तीखे किनारों के आसपास वह नॉइज़ नहीं जोड़ता जो JPG बनाता है।
32-बिट BMP काला बैकग्राउंड दिखाती है
प्रोग्राम अल्फ़ा बाइट को नहीं पहचानता या ग़लत पढ़ता है। PNG में बदलने से आमतौर पर यह ठीक हो जाता है। JPG में बदलते समय, जिसमें पारदर्शिता नहीं होती, पारदर्शी हिस्से सफ़ेद या आपके चुने रंग से भरे जाते हैं।
इमेज उलटी या तिरछी है
अपने लिखे रीडर में यह आमतौर पर दो ग़लतियों से होता है: यह भूल जाना कि पंक्तियाँ नीचे से ऊपर रखी जाती हैं, या हर पंक्ति के अंत के पैडिंग बाइट न छोड़ना। ऊपर दिया stride फ़ॉर्मूला इस्तेमाल करने और ऊँचाई का चिह्न जाँचने से दोनों से बचा जा सकता है।
कोई प्रोग्राम BMP खोलने से मना करता है
RLE कंप्रेशन, BI_BITFIELDS या एम्बेड किए JPEG/PNG डेटा वाली BMP फ़ाइलें कुछ सरल रीडर सपोर्ट नहीं करते। बिना कंप्रेशन वाली 24-बिट BMP के रूप में दोबारा सेव करने या PNG में बदलने से कम्पैटिबिलिटी की समस्या दूर हो जाती है।
कन्वर्ज़न के टिप्स
- फ़ोटो के लिए JPG, ग्राफ़िक्स के लिए PNG: BMP छोड़ते समय यही सामान्य नियम लागू होता है। वेब के लिए आप इमेज कन्वर्टर में WebP या AVIF भी चुन सकते हैं।
- क्वालिटी ऊँची रखें: BMP लॉसलेस है, इसलिए 85-90% की JPG क्वालिटी ऐसा नतीजा देती है जिसे मूल से अलग पहचानना मुश्किल है।
- ज़रूरत हो तो छोटा करें: अगर फ़ाइल फिर भी बड़ी है, तो पिक्सेल आयाम घटाएँ या लक्षित साइज़ तक पहुँचने के लिए इमेज कंप्रेस करें इस्तेमाल करें।
- उलटी दिशा में: अगर किसी एम्बेडेड डिवाइस या पुराने प्रोग्राम को BMP चाहिए, तो इमेज कन्वर्टर में लक्ष्य के रूप में BMP चुनें। हमारे टूल मानक, बिना कंप्रेशन वाली 24-बिट BMP लिखते हैं; पारदर्शी हिस्से आपके चुने बैकग्राउंड रंग पर समतल कर दिए जाते हैं।
हमारे BMP कन्वर्ज़न पेज आपके ब्राउज़र में चलते हैं: फ़ाइल अपलोड नहीं होती और आपके डिवाइस से बाहर नहीं जाती।
अक्सर पूछे जाने वाले सवाल
क्या BMP और DIB एक ही चीज़ हैं?
व्यवहार में, हाँ। DIB वह device-independent bitmap संरचना है जिसे Windows मेमोरी और क्लिपबोर्ड पर इस्तेमाल करता है; BMP फ़ाइल वही संरचना है जिसके आगे 14-बाइट का फ़ाइल हेडर लगा होता है।
क्या BMP लॉसलेस है?
हाँ। बिना कंप्रेशन वाली और RLE से कंप्रेस BMP फ़ाइलें पिक्सेल मानों को हूबहू रखती हैं। एकमात्र अपवाद एम्बेड किए JPEG डेटा वाली दुर्लभ BMP है।
क्या BMP को PNG में बदलने से क्वालिटी घटती है?
नहीं। PNG भी लॉसलेस है; इमेज बिल्कुल वैसी ही रहती है और कंप्रेस होने के कारण केवल छोटी हो जाती है।
क्या मैं वेबसाइट पर BMP इस्तेमाल कर सकता हूँ?
ब्राउज़र BMP दिखाते हैं, लेकिन फ़ाइलें बेवजह बड़ी होती हैं और पेजों को धीमा करती हैं। वेब के लिए JPG, PNG, WebP या AVIF इस्तेमाल करें।
क्या BMP पारदर्शिता सपोर्ट करता है?
32-बिट BMP सिद्धांत रूप में अल्फ़ा चैनल रख सकती है, लेकिन सॉफ़्टवेयर इसे एक जैसा सपोर्ट नहीं करते। जब भी पारदर्शिता चाहिए, PNG ज़्यादा सुरक्षित विकल्प है।


