Ana içeriğe geç

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 dosya biçimi rehberi kapak görseli

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ıkBoyutGetirdiği başlıca özellik
BITMAPCOREHEADER12 baytOS/2 1.x uyumlu temel yapı
BITMAPINFOHEADER40 baytWindows 3.0 ile gelen, en yaygın başlık; sıkıştırma ve çözünürlük alanları
BITMAPV4HEADER108 baytRenk maskeleri, alfa maskesi ve renk uzayı bilgisi
BITMAPV5HEADER124 baytICC 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

AvantajlarDezavantajlar
Kayıpsız; piksel değerleri değişmezSı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ırMeta veri (EXIF, açıklama) desteği zayıf
Paletli modlar düşük kaynaklı cihazlar için uygunWeb, 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.

Kaynaklar

İlgili dönüştürücüler

Tüm yazılar