Fayl formatları
BMP nədir? Bitmap formatının izahı
BMP Windows-un sıxılmamış, itkisiz bitmap formatıdır. Onun başlıq quruluşunu, rəng dərinliklərini, məhdudiyyətlərini və faylları necə kiçiltmək olduğunu izah edirik.
Müəllif: Hemen Dönüştür Editör EkibiDərc olunub: 7 dəq oxuma

BMP Windows dünyasının ən köhnə və ən sadə şəkil formatlarından biridir. BMP faylı adətən pikselləri heç bir sıxılma olmadan sətir-sətir diskə yazır. Bu sadəlik onu oxumağı asan və itkisiz edir, eyni sadəlik isə faylları nəhəng edir. Bu məqalədə BMP-nin haradan gəldiyi, faylın içində nə olduğu, rəng dərinliyi və şəffaflığın incəlikləri, bu gün onunla harada qarşılaşdığınız və BMP fayllarını daha praktik formatlara necə çevirmək olduğu izah edilir.
BMP nədir?
BMP (bitmap, genişlənməsi .bmp) rastr, piksel əsaslı şəkil fayl formatıdır. Texniki sənədlərdə ona DIB, yəni cihazdan asılı olmayan bitmap (device-independent bitmap) da deyilir. "Cihazdan asılı olmayan" o deməkdir ki, şəkil hansı qrafik kartında və ya printerdə yaradılmasından asılı olmayaraq eyni cür şərh oluna bilər: fayl rənglərini deşifrə etmək üçün lazım olan məlumatı öz başlığında və rəng cədvəlində daşıyır.
Microsoft-un Win32 sənədlərinə görə bitmap faylı BITMAPFILEHEADER strukturu ilə başlayır, ardınca BITMAPINFOHEADER, BITMAPV4HEADER və ya BITMAPV5HEADER, sonra isteğe bağlı rəng cədvəli və nəhayət piksel məlumatı gəlir. MIME tipi image/bmp-dir.
Qısa tarixçə: Windows və OS/2-dən bu günə
BMP 1980-ci illərin sonunda Microsoft və IBM-in Windows və OS/2 üzərində birgə işindən yaranıb. Windows 1.0 dövründəki bitmaplar çıxış cihazından çox asılı idi; cihazdan asılı olmayan forma 1990-cı ildə Windows 3.0 ilə geniş yayıldı. OS/2 Presentation Manager üçün müəyyən edilmiş 12 baytlıq BITMAPCOREHEADER səbəbindən insanlar hələ də "OS/2 BMP" fayllarından danışır.
İllər ərzində format başlığın sonuna sahələr əlavə etməklə genişləndirildi. Library of Congress-in format təsvirinə görə 5-ci versiya 1998-ci ildə Windows 98 ilə gəldi və ICC rəng profillərini faylda qeyd etməyə imkan verdi. Bu gün geniş yayılmış başlıq ölçüləri bunlardır:
| Başlıq | Ölçü | Əsas əlavə |
|---|---|---|
| BITMAPCOREHEADER | 12 bayt | OS/2 1.x ilə uyğun əsas quruluş |
| BITMAPINFOHEADER | 40 bayt | Windows 3.0-dan gələn ən geniş yayılmış başlıq; sıxılma və ayırdetmə sahələri |
| BITMAPV4HEADER | 108 bayt | Rəng maskaları, alfa maskası və rəng fəzası məlumatı |
| BITMAPV5HEADER | 124 bayt | Daxil edilmiş və ya bağlanmış ICC profilləri, render niyyəti |
Oxuyucular hansı başlığın istifadə olunduğunu onun birinci sahəsindəki ölçü dəyərindən müəyyən edir. Bu, köhnə proqramlara yeni sahələri nəzərə almayıb əsas məlumatları yenə də oxumağa imkan verir.
BMP faylının içində nə var
Fayl başlığı və "BM" imzası
Hər BMP faylı 14 baytlıq fayl başlığı ilə başlayır və onun ilk iki baytı ASCII simvolları BM-dir (onaltılıq 42 4D). Başlıq faylın ümumi ölçüsünü və piksel məlumatının başladığı bayt ofsetini saxlayır. Windows mübadilə buferinə yerləşdirilən DIB (CF_DIB formatı) bu 14 baytı buraxır və birbaşa məlumat başlığı ilə başlayır.
Məlumat başlığı
Məlumat başlığı eni, hündürlüyü, piksel başına bit sayını (biBitCount), sıxılma növünü, üfüqi və şaquli ayırdetməni (metr başına piksel ilə) və rəng cədvəlində istifadə olunan rənglərin sayını saxlayır.
Rəng cədvəli (palitra)
Piksel başına 8 bit və ya daha az olan şəkillərdə piksel rəng deyil, rəng cədvəlindəki indeksdir. Microsoft-un sənədləşdirdiyi nümunədə 16 rəngli 32x32 bitmapın piksel massivi 32 x 32 x 4 = 4096 bitdir, çünki 16 rəngə müraciət etmək üçün 4 bit kifayətdir.
Piksel məlumatı: aşağıdan yuxarı sətirlər və 4 baytlıq düzləndirmə
BMP-nin iki qeyri-adi xüsusiyyəti var. Birincisi, hündürlük müsbətdirsə, sətirlər aşağıdan yuxarıya saxlanılır: fayldakı birinci sətir şəklin ən aşağı sətridir. Mənfi hündürlük sətirləri yuxarıdan aşağıya saxlayır, lakin belə şəkillər sıxıla bilməz. İkincisi, hər sətir 4 baytın misli olana qədər tamamlanır. Microsoft sətir uzunluğunu (stride) belə verir:
stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride 24 bitlik 1920x1080 şəkil üçün hər sətir 1920 x 3 = 5760 baytdır (artıq 4-ün mislidir), ona görə də piksel məlumatı 5760 x 1080 = 6 220 800 bayt təşkil edir. 54 baytlıq başlıqlarla fayl təxminən 6,2 MB olur. Eyni şəkil JPG kimi adətən bunun kiçik bir hissəsi qədər olur.
Rəng dərinliyi, sıxılma və şəffaflıq
BITMAPV5HEADER sənədləri piksel başına 1, 4, 8, 16, 24 və 32 bit müəyyən edir (0 dəyəri dərinliyin daxil edilmiş JPEG və ya PNG məlumatından götürüldüyünü bildirir). 1 bit ağ-qara, 4 bit 16 rəng, 8 bit isə 256 rəngli palitradır. 24 bitdə hər piksel mavi, yaşıl, qırmızı ardıcıllığı ilə üç baytdır.
Sıxılma sahəsi bu dəyərləri ala bilər:
- BI_RGB: Sıxılmamış. Praktikada BMP fayllarının böyük əksəriyyəti.
- BI_RLE8 və BI_RLE4: 8 bitlik və 4 bitlik palitralı şəkillər üçün sadə seriya uzunluğu kodlaşdırması (run-length encoding). Böyük düz sahələr üçün faydalı, fotolar üçün demək olar ki, faydasızdır.
- BI_BITFIELDS: Sıxılma deyil; maskalar 16 və 32 bitlik piksellərdə qırmızı, yaşıl və mavi bitlərin harada yerləşdiyini müəyyən edir (məsələn, RGB 565).
- BI_JPEG və BI_PNG: Bitmapın içində JPEG və ya PNG məlumatına icazə verir. Ümumi təyinatlı baxış proqramları nadir hallarda dəstəkləyir.
Şəffaflıq BMP-nin ən qeyri-sabit sahəsidir. V4 və V5 başlıqlarındakı alfa maskası 32 bitlik pikselin dördüncü baytını qeyri-şəffaflıq kimi təyin edə bilər, lakin klassik 32 bitlik BMP-də bu bayt istifadə olunmayan kimi təsvir edilir və bir çox proqram onu nəzərə almır. Buna görə bir proqramda şəffaf görünən, digərində isə qara fonda dayanan 32 bitlik BMP qeyri-adi hal deyil. Şəffaflıq lazımdırsa, PNG xeyli etibarlı seçimdir.
Sistemlərdə, brauzerlərdə və proqramlarda dəstək
BMP demək olar ki, hər yerdə açılır. Windows-un daxili baxış proqramları və Paint, macOS-da Preview və Linux-un geniş yayılmış baxış proqramları onu oxuyur. MDN-in şəkil formatları bələdçisi BMP dəstəyini Chrome, Edge, Firefox, Opera və Safari-nin bütün versiyalarında göstərir. Eyni bələdçi həmçinin vurğulayır ki, sıxılmamış BMP faylları PNG və ya JPG ilə müqayisədə çox böyükdür və sayt məzmunu üçün ümumiyyətlə onlardan qaçmaq lazımdır.
BMP bu gün harada istifadə olunur?
- Windows tətbiq resursları və köhnə proqramlar: Alətlər paneli şəkilləri, quraşdırma sehrbazı qrafikası və bəzi oyun resursları hələ də BMP-dir.
- Daxili sistemlər və mikrokontrollerlər: Ekranı olan cihaza JPEG dekoderi lazım deyil; piksel məlumatı birbaşa ekrana köçürülə bilər.
- Sənaye kameraları, skanerlər və test alətləri: Xam, itkisiz çıxış lazım olanda BMP sadə aralıq formatdır.
- Tədris: Cəmi bir neçə onlarla baytlıq başlığı ilə BMP çox vaxt şəkil emalı kurslarında tələbələrin oxuyub yazdığı ilk formatdır.
Güclü və zəif tərəfləri
| Güclü tərəflər | Zəif tərəflər |
|---|---|
| İtkisizdir; piksel dəyərləri heç vaxt dəyişmir | Sıxılmamışdır, ona görə də fayllar çox böyükdür |
| Oxumaq və yazmaq çox asandır, prosessor xərci yoxdur | Şəffaflıq dəstəyi qeyri-sabitdir |
| Demək olar ki, hər əməliyyat sistemində və brauzerdə açılır | Metaməlumat dəstəyi zəifdir (EXIF, təsvirlər) |
| Palitra rejimləri az resurslu cihazlar üçün uyğundur | Veb, e-poçt və yükləmə formaları üçün praktik deyil |
Tez-tez rast gəlinən problemlər və həlləri
Fayl e-poçt və ya yükləmə forması üçün çox böyükdür
Bu, ən geniş yayılmış problemdir. Fotolar və skanlar üçün BMP-ni JPG-yə çevirmək adətən ölçünü on dəfə və ya daha çox azaldır. Ekran görüntüləri, diaqramlar və ya mətnli hər şey üçün BMP-ni PNG-yə çevirmək daha yaxşıdır: PNG də itkisizdir, lakin sıxılmışdır və JPG-nin kəskin kənarlar ətrafında yaratdığı küyü əlavə etmir.
32 bitlik BMP qara fon göstərir
Proqram alfa baytını tanımır və ya səhv oxuyur. PNG-yə çevirmək adətən problemi həll edir. Şəffaflığı olmayan JPG-yə çevirəndə şəffaf sahələr ağ rənglə və ya seçdiyiniz rənglə doldurulur.
Şəkil başıaşağı və ya əyri görünür
Özünüz yazdığınız oxuyucuda bu adətən iki səhvdən qaynaqlanır: sətirlərin aşağıdan yuxarı saxlandığını nəzərə almamaq və ya hər sətrin sonundakı tamamlayıcı baytları ötürməmək. Yuxarıdakı stride düsturundan istifadə etmək və hündürlüyün işarəsini yoxlamaq hər ikisinin qarşısını alır.
Proqram BMP-ni açmaqdan imtina edir
RLE sıxılmalı, BI_BITFIELDS və ya daxil edilmiş JPEG/PNG məlumatlı BMP faylları bəzi sadə oxuyucular tərəfindən dəstəklənmir. Sıxılmamış 24 bitlik BMP kimi yenidən saxlamaq və ya PNG-yə çevirmək uyğunluq problemini aradan qaldırır.
Çevirmə tövsiyələri
- Fotolar üçün JPG, qrafika üçün PNG: BMP-dən çıxarkən adi qayda keçərlidir. Veb üçün şəkil konvertorunda WebP və ya AVIF də seçə bilərsiniz.
- Keyfiyyəti yüksək saxlayın: BMP itkisiz olduğu üçün 85-90% JPG keyfiyyəti orijinaldan çətin seçilən nəticə verir.
- Lazım olsa, kiçildin: Fayl hələ də böyükdürsə, piksel ölçülərini azaldın və ya hədəf ölçüyə çatmaq üçün şəkil sıxma alətindən istifadə edin.
- Əks istiqamətdə: Daxili cihaz və ya köhnə proqram BMP tələb edirsə, şəkil konvertorunda hədəf kimi BMP seçin. Alətlərimiz standart sıxılmamış 24 bitlik BMP yazır; şəffaf sahələr seçdiyiniz fon rənginə yastılanır.
BMP çevirmə səhifələrimiz brauzerinizdə işləyir: fayl yüklənmir və heç vaxt cihazınızdan çıxmır.
Tez-tez verilən suallar
BMP və DIB eyni şeydirmi?
Praktikada bəli. DIB Windows-un yaddaşda və mübadilə buferində istifadə etdiyi cihazdan asılı olmayan bitmap strukturudur; BMP faylı isə önünə 14 baytlıq fayl başlığı əlavə olunmuş həmin strukturdur.
BMP itkisizdirmi?
Bəli. Sıxılmamış və RLE ilə sıxılmış BMP faylları piksel dəyərlərini dəqiq saxlayır. Yeganə istisna daxil edilmiş JPEG məlumatlı nadir BMP-lərdir.
BMP-ni PNG-yə çevirmək keyfiyyəti azaldırmı?
Xeyr. PNG də itkisizdir; şəkil eyni qalır və yalnız sıxıldığı üçün kiçilir.
BMP-ni saytda istifadə edə bilərəmmi?
Brauzerlər BMP-ni göstərir, lakin fayllar lüzumsuz böyükdür və səhifələri yavaşladır. Veb üçün JPG, PNG, WebP və ya AVIF istifadə edin.
BMP şəffaflığı dəstəkləyirmi?
32 bitlik BMP nəzəri olaraq alfa kanalı daşıya bilər, lakin proqramlar onu ardıcıl dəstəkləmir. Şəffaflıq lazım olanda PNG daha etibarlı seçimdir.


