Dosya Formatları
BMP Nedir? Bitmap Biçiminin Yapısı ve Kullanımı
BMP, Windows'un sıkıştırmasız ve kayıpsız bitmap biçimidir. Başlık yapısını, renk derinliklerini, sınırlarını ve dosyaları nasıl küçülteceğinizi anlatıyoruz.
Yazar: Hemen Dönüştür Editör EkibiYayınlanma: 7 dk okuma

BMP, Windows dünyasının en eski ve en sade görsel biçimlerinden biridir. Bir BMP dosyası çoğu zaman pikselleri hiç sıkıştırmadan, satır satır diske yazar. Bu sadelik onu okuması kolay ve kayıpsız bir biçim yapar; aynı sadelik dosyaları devasa boyutlara da taşır. Bu yazıda BMP'nin nereden geldiğini, dosyanın içinde neler olduğunu, renk derinliği ve şeffaflık konusundaki inceliklerini, bugün hangi durumlarda hâlâ karşımıza çıktığını ve BMP dosyalarını nasıl daha kullanışlı biçimlere çevirebileceğinizi anlatıyoruz.
BMP nedir?
BMP (Bitmap, uzantısı .bmp), raster yani piksel tabanlı bir görsel dosya biçimidir. Teknik literatürde DIB (Device Independent Bitmap, cihazdan bağımsız bitmap) adıyla da anılır. "Cihazdan bağımsız" ifadesi, görüntünün hangi ekran kartında ya da yazıcıda oluşturulduğundan bağımsız olarak aynı şekilde yorumlanabilmesi anlamına gelir: dosya, renklerin nasıl çözüleceğini kendi başlığında ve renk tablosunda taşır.
Microsoft'un Win32 belgelerine göre bir bitmap dosyası BITMAPFILEHEADER yapısıyla başlar, ardından BITMAPINFOHEADER, BITMAPV4HEADER ya da BITMAPV5HEADER yapılarından biri gelir; varsa bunu bir renk tablosu ve en sonda piksel verisi izler. MIME türü image/bmp'dir.
Kısa tarihçe: Windows ve OS/2'den bugüne
BMP, 1980'lerin sonunda Microsoft ile IBM'in Windows ve OS/2 üzerindeki ortak çalışmasından doğdu. Windows 1.0 döneminin bitmap'leri büyük ölçüde çıktı cihazına bağımlıydı; cihazdan bağımsız biçim 1990'da Windows 3.0 ile yaygınlaştı. OS/2'nin Presentation Manager'ı için tanımlanan 12 baytlık BITMAPCOREHEADER bu yüzden hâlâ "OS/2 BMP" diye anılır.
Biçim sonraki yıllarda başlık yapısına alan eklenerek genişletildi. Library of Congress'in biçim açıklamasına göre sürüm 5, 1998'de Windows 98 ile geldi ve ICC renk profillerini dosyaya kaydetmeyi mümkün kıldı. Bugün yaygın başlık boyutları şöyledir:
| Başlık | Boyut | Getirdiği başlıca özellik |
|---|---|---|
| BITMAPCOREHEADER | 12 bayt | OS/2 1.x uyumlu temel yapı |
| BITMAPINFOHEADER | 40 bayt | Windows 3.0 ile gelen, en yaygın başlık; sıkıştırma ve çözünürlük alanları |
| BITMAPV4HEADER | 108 bayt | Renk maskeleri, alfa maskesi ve renk uzayı bilgisi |
| BITMAPV5HEADER | 124 bayt | ICC profili gömme ya da bağlama, render niyeti |
Okuyucu programlar hangi başlığın kullanıldığını başlığın ilk alanındaki boyut değerinden anlar. Bu sayede eski programlar yeni alanları görmezden gelip temel bilgileri okuyabilir.
BMP dosyasının içi
Dosya başlığı ve "BM" imzası
Her BMP dosyası 14 baytlık bir dosya başlığıyla başlar ve ilk iki bayt ASCII olarak BM karakterleridir (onaltılık 42 4D). Bu başlık dosyanın toplam boyutunu ve piksel verisinin dosyanın kaçıncı baytından başladığını söyler. Panoya kopyalanan bir DIB'de (Windows'taki CF_DIB biçimi) bu 14 baytlık başlık bulunmaz; veri doğrudan bilgi başlığıyla başlar.
Bilgi başlığı
Bilgi başlığında genişlik, yükseklik, piksel başına bit sayısı (biBitCount), sıkıştırma türü, yatay ve dikey çözünürlük (metre başına piksel cinsinden) ve renk tablosunda kullanılan renk sayısı bulunur.
Renk tablosu (palet)
8 bit ve altındaki görsellerde pikseller doğrudan renk değil, bir renk tablosundaki sıra numarasıdır. Microsoft'un belgelediği örnekte 32x32 piksel, 16 renkli bir bitmap'in piksel dizisi 32 x 32 x 4 = 4096 bit tutar, çünkü 16 rengi göstermek için 4 bit yeter.
Piksel verisi: alttan üste ve 4 baytlık hizalama
BMP'nin iki alışılmadık özelliği vardır. Birincisi, yükseklik değeri pozitifse satırlar alttan üste doğru saklanır; dosyadaki ilk satır görüntünün en alt satırıdır. Yükseklik negatif yazılırsa satırlar üstten alta saklanır, ancak bu durumda görüntü sıkıştırılamaz. İkincisi, her satır 4 baytın katına tamamlanır. Microsoft bu satır uzunluğunu (stride) şu formülle verir:
stride = ((genişlik * bitSayısı + 31) & ~31) >> 3
görüntüBoyutu = |yükseklik| * stride
Örneğin 1920x1080 piksellik 24 bit bir görüntüde her satır 1920 x 3 = 5760 bayttır (zaten 4'ün katı), piksel verisi 5760 x 1080 = 6.220.800 bayt eder. 54 baytlık başlıkla birlikte dosya yaklaşık 6,2 MB olur. Aynı görüntü JPG olarak genellikle bunun küçük bir kesridir.
Renk derinliği, sıkıştırma ve şeffaflık
BITMAPV5HEADER belgesine göre piksel başına 1, 4, 8, 16, 24 ve 32 bit değerleri tanımlıdır (0 değeri, rengin gömülü JPEG ya da PNG verisinden okunacağını belirtir). 1 bit siyah beyaz, 4 bit 16 renk, 8 bit 256 renk paletli görüntü demektir. 24 bitte her piksel mavi, yeşil ve kırmızı sırasıyla üç bayttır.
Sıkıştırma alanı şu değerleri alabilir:
- BI_RGB: Sıkıştırmasız. Pratikte BMP dosyalarının büyük çoğunluğu böyledir.
- BI_RLE8 ve BI_RLE4: 8 ve 4 bitlik paletli görüntüler için basit çalışma uzunluğu kodlaması (run-length encoding). Geniş düz renk alanlarında işe yarar, fotoğrafta neredeyse hiç kazanç sağlamaz.
- BI_BITFIELDS: Sıkıştırma değil; 16 ve 32 bitlik piksellerde kırmızı, yeşil ve mavi bitlerin yerini maskelerle tanımlar (örneğin RGB 565).
- BI_JPEG ve BI_PNG: Bitmap'in içine JPEG ya da PNG verisi gömülmesine izin verir. Genel amaçlı görüntüleyicilerde nadiren desteklenir.
Şeffaflık BMP'nin en tutarsız yanıdır. V4 ve V5 başlıklarındaki alfa maskesi 32 bitlik piksellerde dördüncü baytı opaklık olarak tanımlayabilir; ancak klasik 32 bit BMP'de bu bayt "kullanılmaz" diye geçer ve birçok program onu yok sayar. Yani 32 bit bir BMP'nin bir programda şeffaf, başka bir programda siyah zeminli görünmesi şaşırtıcı değildir. Şeffaflık gerekiyorsa PNG çok daha güvenli bir seçimdir.
Destek: işletim sistemleri, tarayıcılar ve yazılımlar
BMP neredeyse her yerde açılır. Windows'un yerleşik görüntüleyicileri ve Paint, macOS Önizleme ve Linux'taki yaygın görüntüleyiciler BMP'yi okur. MDN'nin görsel biçimleri rehberine göre Chrome, Edge, Firefox, Opera ve Safari'nin tüm sürümleri BMP gösterir. Ancak aynı rehber, sıkıştırmasız BMP dosyalarının PNG ya da JPG'ye göre çok büyük olduğu için web içeriğinde genellikle kullanılmaması gerektiğini de vurgular.
BMP bugün nerede kullanılıyor?
- Windows uygulama kaynakları ve eski yazılımlar: Araç çubuğu görselleri, kurulum sihirbazı görselleri ve bazı oyunların kaynak dosyaları hâlâ BMP olabilir.
- Gömülü sistemler ve mikrodenetleyiciler: Ekranlı cihazlarda görüntüyü çözmek için JPEG çözücüsü gerekmez; piksel verisi doğrudan ekrana kopyalanabilir.
- Endüstriyel kameralar, tarayıcılar ve test araçları: Ham ve kayıpsız çıktı istendiğinde BMP basit bir ara biçimdir.
- Programlama eğitimi: Başlığı birkaç düzine bayttan ibaret olduğu için görüntü işleme derslerinde ilk okunan/yazılan biçim çoğu zaman BMP'dir.
Avantajlar ve dezavantajlar
| Avantajlar | Dezavantajlar |
|---|---|
| Kayıpsız; piksel değerleri değişmez | Sıkıştırmasız olduğu için dosyalar çok büyük |
| Okuması ve yazması çok kolay, işlemci yükü yok | Şeffaflık desteği tutarsız |
| Neredeyse tüm işletim sistemi ve tarayıcılarda açılır | Meta veri (EXIF, açıklama) desteği zayıf |
| Paletli modlar düşük kaynaklı cihazlar için uygun | Web, e-posta ve form yüklemeleri için elverişsiz |
Sık karşılaşılan sorunlar ve çözümleri
Dosya çok büyük, e-postaya ya da forma sığmıyor
En yaygın sorun budur. Fotoğraf ya da taranmış belge ise BMP'yi JPG'ye çevirmek boyutu çoğunlukla onlarca kat düşürür. Ekran görüntüsü, şema ya da metin içeren bir görselse BMP'yi PNG'ye çevirmek daha iyidir: PNG de kayıpsızdır ama sıkıştırır, keskin kenarlarda JPG'nin oluşturduğu gürültüyü üretmez.
32 bit BMP'de arka plan siyah görünüyor
Program alfa baytını tanımıyor ya da yanlış yorumluyor demektir. Görseli PNG'ye çevirmek genellikle sorunu çözer. JPG'ye çevirirken ise JPG şeffaflık taşımadığı için saydam alanlar beyaz ya da seçtiğiniz bir renkle doldurulur.
Görüntü baş aşağı ya da kaymış görünüyor
Kendi yazdığınız bir okuyucuda bu genellikle iki hatadan kaynaklanır: satırların alttan üste saklandığını hesaba katmamak ya da her satırın sonundaki hizalama baytlarını atlamamak. Yukarıdaki stride formülünü kullanmak ve yükseklik işaretini kontrol etmek bu hataları önler.
Bir program BMP dosyasını açmıyor
RLE sıkıştırmalı, BI_BITFIELDS kullanan ya da içine JPEG/PNG gömülü BMP'ler bazı basit okuyucularda desteklenmez. Dosyayı sıkıştırmasız 24 bit BMP'ye ya da doğrudan PNG'ye dönüştürmek uyumluluk sorununu ortadan kaldırır.
BMP dönüştürme ipuçları
- Fotoğraf için JPG, grafik için PNG: Bu kural BMP'den çıkarken de geçerlidir. Web'e koyacaksanız görsel dönüştürücüde WebP ya da AVIF de seçebilirsiniz.
- Kaliteyi yüksek tutun: BMP kayıpsız olduğundan JPG'ye çevirirken %85-90 kalite, gözle ayırt edilmesi zor bir sonuç verir.
- Gerekirse küçültün: Dosya hâlâ büyükse piksel boyutunu düşürmek ya da resim küçült aracıyla hedef boyuta sıkıştırmak işe yarar.
- Ters yönde BMP üretmek: Gömülü bir cihaz ya da eski bir program BMP istiyorsa görsel dönüştürücüde hedef olarak BMP seçebilirsiniz. Araçlarımız 24 bitlik, sıkıştırmasız standart BMP yazar; şeffaf alanlar seçtiğiniz zemin rengine basılır.
BMP dönüştürme sayfalarımız tarayıcınızda çalışır: dosya sunucuya yüklenmez, cihazınızdan çıkmaz.
Sık Sorulan Sorular
BMP ile DIB aynı şey mi?
Pratikte evet. DIB, Windows'un bellekte ve panoda kullandığı cihazdan bağımsız bitmap yapısıdır; BMP dosyası bu yapının önüne 14 baytlık bir dosya başlığı eklenmiş hâlidir.
BMP kayıpsız mı?
Evet. Sıkıştırmasız ve RLE sıkıştırmalı BMP'lerde piksel değerleri birebir korunur. Tek istisna, içine JPEG gömülmüş nadir BMP dosyalarıdır.
BMP'yi PNG'ye çevirince kalite düşer mi?
Hayır. PNG de kayıpsızdır; görüntü aynı kalır, yalnızca dosya sıkıştırıldığı için küçülür.
BMP web sitesinde kullanılır mı?
Tarayıcılar BMP gösterir, ancak dosyalar gereksiz yere büyük olduğundan sayfayı yavaşlatır. Web için JPG, PNG, WebP ya da AVIF tercih edin.
BMP şeffaflık destekler mi?
32 bitlik BMP teorik olarak alfa kanalı taşıyabilir, ama programlar bunu tutarlı biçimde desteklemez. Şeffaflık gereken her durumda PNG kullanmak daha güvenlidir.


