BMP dosya biçimi - BMP file format
Dosya adı uzantısı |
.bmp , .dib
|
---|---|
İnternet medya türü |
image/bmp image/x-bmp
|
Tür kodu |
'BMP ' 'BMPf' 'BMPp'
|
Tekdüzen Tip Tanımlayıcısı (UTI) | com.microsoft.bmp |
Tarafından geliştirilmiş | Microsoft şirketi |
Biçim türü | raster grafikler |
Açık biçim ? | WMF için OSP |
BMP dosyası biçimi olarak da bilinen, bir bitmap görüntü dosyası , cihazdan bağımsız bir bitmap (DIB) dosya formatı ve bitmap , a, raster grafik görüntü dosyası formatı depolamak için kullanılır , bitmap dijital görüntü bağımsız olarak, gösterim cihazı (örneğin, bir şekilde grafik adaptörü ) özellikle Microsoft Windows ve OS/2 işletim sistemlerinde.
BMP dosya formatı, çeşitli renk derinliklerinde ve isteğe bağlı olarak veri sıkıştırma , alfa kanalları ve renk profilleri ile hem monokrom hem de renkli iki boyutlu dijital görüntüleri depolayabilir . Windows Meta Dosyası (WMF) şartname BMP dosya biçimini kapsar.
Cihazdan bağımsız bitmapler ve BMP dosya formatı
Microsoft, çeşitli dahili temsillerle cihazlar ve uygulamalar arasında bitmap alışverişine yardımcı olmak için farklı renk derinliklerine sahip renk bitmaplerinin belirli bir temsilini tanımlamıştır. Bu cihazdan bağımsız bitmapler veya DIB'ler olarak adlandırdılar ve onlar için dosya formatına DIB dosya formatı veya BMP görüntü dosyası formatı denir.
Microsoft desteğine göre:
Aygıttan bağımsız bit eşlem (DIB), çeşitli renk çözünürlüklerinde aygıttan bağımsız bit eşlemleri tanımlamak için kullanılan bir biçimdir. DIB'lerin temel amacı, bitmap'lerin bir cihazdan diğerine taşınmasına izin vermektir (dolayısıyla adın cihazdan bağımsız kısmı). DIB, sistemde bir bitmap nesnesi olarak görünen (bir uygulama tarafından oluşturulan...) aygıta bağlı bir bitmap'in aksine harici bir formattır. Bir DIB normalde meta dosyalarında (genellikle StretchDIBits() işlevi kullanılarak), BMP dosyalarında ve Panoda ( CF_DIB veri formatı) taşınır .
Aşağıdaki bölümlerde, BMP dosyasında veya DIB'de saklanan veriler ayrıntılı olarak tartışılmaktadır. Bu, standart BMP dosya biçimidir. Bazı uygulamalar, Microsoft belgeleriyle uyumlu olmayan bitmap görüntü dosyaları oluşturur. Ayrıca, tüm alanlar kullanılmaz; Bu kullanılmayan alanlarda 0 değeri bulunur.
dosya yapısı
Bitmap görüntü dosyası, önceden belirlenmiş bir sırada görünen değişken boyutlu yapıların yanı sıra sabit boyutlu yapılardan (başlıklar) oluşur. Bu dosya biçiminin uzun süredir gelişmesi nedeniyle, bu yapılardan bazılarının birçok farklı sürümü dosyada görünebilir.
Diyagram 1'e bakıldığında, bitmap dosyası aşağıdaki sırayla yapılardan oluşur:
Yapı adı | İsteğe bağlı | Boy | Amaç | Yorumlar |
---|---|---|---|---|
Bitmap dosya başlığı | Numara | 14 bayt | Bitmap görüntü dosyası hakkında genel bilgileri depolamak için | Dosya belleğe yüklendikten sonra gerekli değildir |
DIB başlığı | Numara | Sabit boyutlu (7 farklı versiyon mevcuttur) |
Bitmap görüntüsü hakkında ayrıntılı bilgi depolamak ve piksel biçimini tanımlamak için | Bitmap dosya başlığını hemen takip eder |
Ekstra bit maskeleri | Evet | 3 veya 4 DWORD (12 veya 16 bayt) |
Piksel biçimini tanımlamak için | Yalnızca DIB başlığının BITMAPINFOHEADER olması ve Sıkıştırma Yöntemi üyesinin BI_BITFIELDS veya BI_ALPHABITFIELDS olarak ayarlanması durumunda mevcuttur |
Renk tablosu | yarı isteğe bağlı | Değişken boyut | Bitmap görüntü verileri tarafından kullanılan renkleri tanımlamak için (Piksel dizisi) | Renk derinlikleri için zorunlu ≤ 8 bit |
boşluk1 | Evet | Değişken boyut | Yapı hizalama | Bitmap dosya başlığındaki Piksel dizisine göre Dosya ofsetinin bir yapıtı |
Piksel dizisi | Numara | Değişken boyut | Piksellerin gerçek değerlerini tanımlamak için | Piksel formatı, DIB başlığı veya Ekstra bit maskeleri tarafından tanımlanır. Pixel dizisindeki her satır, boyut olarak 4 baytın katlarına kadar doldurulur |
boşluk2 | Evet | Değişken boyut | Yapı hizalama | DIB başlığındaki ICC profil verileri ofset alanının bir eseri |
ICC renk profili | Evet | Değişken boyut | Renk yönetimi için renk profilini tanımlamak için | Renk profilini içeren harici bir dosyanın yolunu da içerebilir. "Paketlenmemiş DIB" olarak belleğe yüklendiğinde, renk tablosu ile Gap1 arasında yer alır. |
Bellekteki DIB'ler
Belleğe yüklenen bir bitmap görüntü dosyası, Windows GDI API'sinin önemli bir bileşeni olan bir DIB veri yapısı haline gelir. Bellek içi DIB veri yapısı, BMP dosya formatı ile hemen hemen aynıdır, ancak 14 baytlık bitmap dosya başlığını içermez ve DIB başlığı ile başlar. Belleğe yüklenen DIB'ler için, renk tablosu, açık RGB renk tanımları yerine, halihazırda gerçekleştirilmiş palete (ek bir dolaylılık düzeyi) dizinler oluşturan 16 bitlik girişlerden de oluşabilir. Her durumda, piksel dizisi, 4 baytın katı olan bir bellek adresinde başlamalıdır. Belleğe yüklenen paketlenmemiş DIB'lerde, isteğe bağlı renk profili verileri, renk tablosundan hemen sonra ve boşluk1 ve piksel dizisinden önce yerleştirilmelidir (şekil 1'den farklı olarak).
Boşluk1 ve boşluk2'nin boyutu sıfır olduğunda, bellek içi DIB veri yapısı geleneksel olarak "paketlenmiş DIB" olarak adlandırılır ve DIB başlığının başlangıcına işaret eden tek bir işaretçi ile ifade edilebilir. Her durumda, piksel dizisi, 4 baytın katı olan bir bellek adresinde başlamalıdır. Bazı durumlarda, piksel dizisinin bellek adresini 4 baytın katlarına zorlamak için renk tablosundaki girişlerin sayısını ayarlamak gerekebilir. Belleğe yüklenen "paketlenmiş DIB'ler" için, isteğe bağlı renk profili verileri, resimde gösterildiği gibi piksel dizisini hemen izlemelidir. 1 (boşluk1=0 ve boşluk2=0 ile).
"Paketlenmiş DIB'ler", Windows pano API işlevlerinin yanı sıra bazı Windows desenli fırça ve kaynak işlevleri için gereklidir.
Bitmap dosya başlığı
Bu bayt bloğu dosyanın başındadır ve dosyayı tanımlamak için kullanılır. Tipik bir uygulama, dosyanın gerçekten bir BMP dosyası olduğundan ve zarar görmediğinden emin olmak için önce bu bloğu okur. BMP dosya formatının ilk 2 baytı, ASCII kodlamasında "B" karakteri, ardından "M" karakteridir . Tüm tamsayı değerleri, küçük endian biçiminde saklanır (yani, önce en az anlamlı bayt).
Ofset altıgen | Aralık ofset | Boy | Amaç |
---|---|---|---|
00 | 0 | 2 bayt | Başlık alanı BMP ve DIB dosyayı tanımlamak için kullanılır 0x42 0x4D de onaltılık , aynı BM ASCII. Aşağıdaki girişler mümkündür:
|
02 | 2 | 4 bayt | BMP dosyasının bayt cinsinden boyutu |
06 | 6 | 2 bayt | Rezerve; gerçek değer, görüntüyü oluşturan uygulamaya bağlıdır, manuel olarak oluşturulursa 0 olabilir |
08 | 8 | 2 bayt | Rezerve; gerçek değer, görüntüyü oluşturan uygulamaya bağlıdır, manuel olarak oluşturulursa 0 olabilir |
0A | 10 | 4 bayt | Bitmap görüntü verilerinin (piksel dizisi) bulunabileceği baytın ofseti, yani başlangıç adresi. |
DIB başlığı (bitmap bilgi başlığı)
Bu bayt bloğu, uygulamaya, görüntüyü ekranda görüntülemek için kullanılacak olan görüntü hakkında ayrıntılı bilgi verir. Blok ayrıca Windows ve OS/2 tarafından dahili olarak kullanılan başlıkla da eşleşir ve birkaç farklı çeşidi vardır. Hepsi, bir uygulamanın görüntüde hangi başlığın kullanıldığını kolayca belirleyebilmesi için boyutlarını belirten bir dword (32 bit) alanı içerir. Farklı başlıkların olmasının nedeni, Microsoft'un DIB biçimini birkaç kez genişletmesidir. Yeni genişletilmiş başlıklar, eskileri yerine bazı GDI işlevleriyle kullanılabilir ve daha fazla işlevsellik sağlar. GDI, bitmap dosyalarını yüklemek için bir işlevi desteklediğinden, tipik Windows uygulamaları bu işlevi kullanır. Bunun bir sonucu, bu tür uygulamalar için destekledikleri BMP biçimlerinin, çalıştırılan Windows sürümü tarafından desteklenen biçimlerle eşleşmesidir. Daha fazla bilgi için aşağıdaki tabloya bakın.
Boy | Başlık adı | işletim sistemi desteği | Özellikleri | Tarafından yazılmıştır |
---|---|---|---|---|
12 |
BITMAPCOREHEADER OS21XBITMAPHEADER |
Windows 2.0 veya üzeri OS/2 1.x |
||
64 | OS22XBITMAPHEADER | OS/2 BITMAPCOREHEADER 2 | Yarım ton ekler . RLE ve Huffman 1D sıkıştırması ekler . | |
16 | OS22XBITMAPHEADER | Önceki başlığın bu varyantı yalnızca ilk 16 baytı içerir ve kalan baytların sıfır değerleri olduğu varsayılır.
Böyle bir duruma örnek olarak BMP Suite'in pal8os2v2-16.bmp grafiği verilebilir . |
||
40 | BITMAPINFHEEADER | Windows NT , 3.1x veya üstü | Bitmap genişliğini ve yüksekliğini 4 bayta genişletir. 16 bpp ve 32 bpp biçimleri ekler. RLE sıkıştırması ekler. | |
52 | BITMAPV2INFOHEADER | belgesiz | RGB bit maskeleri ekler. | Adobe Photoshop |
56 | BITMAPV3INFOHEADER | Resmi olarak belgelenmemiştir, ancak bu belgeler Adobe'nin forumlarında, bir Adobe çalışanı tarafından standardın geçmişte bir noktada resmi MS belgelerine dahil edildiğine dair bir beyanla yayınlanmıştır. | Alfa kanalı bit maskesi ekler . | Adobe Photoshop |
108 | BITMAPV4BAŞLIK | Windows NT 4.0 , 95 veya üstü | Renk alanı türü ve gama düzeltmesi ekler | |
124 | BITMAPV5BAŞLIK | Windows NT 5.0 , 98 veya üzeri | ICC renk profilleri ekler | GIMP |
Ofset (altıgen) | Ofset (ara) | Boyut (bayt) | OS/2 1.x BITMAPCOREHEADER |
---|---|---|---|
0E | 14 | 4 | Bu başlığın boyutu (12 bayt) |
12 | 18 | 2 | Piksel cinsinden bitmap genişliği (işaretsiz 16 bit) |
14 | 20 | 2 | Piksel cinsinden bitmap yüksekliği (işaretsiz 16 bit) |
16 | 22 | 2 | Renk düzlemlerinin sayısı 1 olmalıdır |
18 | 24 | 2 | Piksel başına bit sayısı |
Windows 2.x BITMAPCOREHEADER, OS/2 1.x BITMAPCOREHEADER'dan (yukarıdaki tabloda gösterilmektedir), görüntü genişlik ve yükseklik alanlarının imzasız değil, tamsayılar olarak işaretlenmiş olmasıyla farklılık gösterir.
BITMAPINFOHEADER'den sonraki sürümler, yalnızca önceki sürümün başlığının sonuna alanlar ekler. Örneğin: BITMAPV2INFOHEADER alanları ekler BITMAPINFOHEADER ve BITMAPV3INFOHEADER alanları ekler BITMAPV2INFOHEADER .
Belgelenmemiş BITMAPV3INFOHEADER ve belgelenmiş BITMAPV4HEADER ( Windows 95'ten beri ) ile entegre bir alfa kanalı tanıtıldı ve Windows XP oturum açma ve tema sisteminin yanı sıra Microsoft Office (v2000'den beri) içinde kullanılıyor; sürüm 7'den beri Adobe Photoshop ve MX 2004'ten beri Adobe Flash (daha sonra Macromedia Flash olarak bilinir) gibi bazı görüntü düzenleme yazılımları tarafından desteklenir . Ayrıca GIMP , Google Chrome , Microsoft PowerPoint ve Microsoft Word tarafından da desteklenmektedir .
Uyumluluk nedenleriyle, çoğu uygulama dosyaları kaydetmek için eski DIB başlıklarını kullanır. OS/2, Windows 2000'den sonra artık desteklenmediğinden, şimdilik yaygın Windows biçimi BITMAPINFOHEADER başlığıdır. Açıklaması için sonraki tabloya bakın. Açıkça belirtilmediği sürece tüm değerler işaretsiz tamsayılar olarak saklanır.
Ofset (altıgen) | Ofset (ara) | Boyut (bayt) | Windows BITMAPINFHEADER |
---|---|---|---|
0E | 14 | 4 | bu başlığın bayt cinsinden boyutu (40) |
12 | 18 | 4 | piksel cinsinden bitmap genişliği (işaretli tam sayı) |
16 | 22 | 4 | piksel cinsinden bitmap yüksekliği (işaretli tam sayı) |
1 A | 26 | 2 | renk düzlemlerinin sayısı (1 olmalıdır) |
1C | 28 | 2 | görüntünün renk derinliği olan piksel başına bit sayısı. Tipik değerler 1, 4, 8, 16, 24 ve 32'dir. |
1E | 30 | 4 | kullanılan sıkıştırma yöntemi. Olası değerlerin listesi için sonraki tabloya bakın |
22 | 34 | 4 | görüntü boyutu. Bu, ham bit eşlem verilerinin boyutudur; BI_RGB bit eşlemleri için sahte bir 0 verilebilir. |
26 | 38 | 4 | görüntünün yatay çözünürlüğü. (metre başına piksel, işaretli tam sayı) |
2A | 42 | 4 | görüntünün dikey çözünürlüğü. (metre başına piksel, işaretli tam sayı) |
2E | 46 | 4 | renk paletindeki renk sayısı veya varsayılan olarak 0'dan 2 n'ye |
32 | 50 | 4 | kullanılan önemli renklerin sayısı veya her renk önemli olduğunda 0; genellikle göz ardı |
Sıkıştırma yöntemi (ofset 30) şunlar olabilir:
Değer | Tarafından tanımlanan | Sıkıştırma yöntemi | Yorumlar |
---|---|---|---|
0 | BI_RGB | Yok | en yaygın |
1 | BI_RLE8 | RLE 8 bit/piksel | Yalnızca 8 bit/piksel bit eşlemlerle kullanılabilir |
2 | BI_RLE4 | RLE 4 bit/piksel | Yalnızca 4 bit/piksel bit eşlemlerle kullanılabilir |
3 | BI_BITFIELDS | OS22XBITMAPHEADER : Huffman 1D |
BITMAPV2INFOHEADER : RGB bit alan maskeleri, BITMAPV3INFOHEADER + : RGBA |
4 | BI_JPEG | OS22XBITMAPHEADER : RLE-24 | BITMAPV4INFOHEADER + :Yazdırma için JPEG görüntüsü |
5 | BI_PNG | BITMAPV4INFOHEADER + :Baskı için PNG resmi | |
6 | BI_ALPHABITFIELDS | RGBA bit alan maskeleri | yalnızca .NET 4.0 veya üstü ile Windows CE 5.0 |
11 | BI_CMYK | Yok | yalnızca Windows Meta Dosyası CMYK |
12 | BI_CMYKRLE8 | RLE-8 | yalnızca Windows Meta Dosyası CMYK |
13 | BI_CMYKRLE4 | RLE-4 | yalnızca Windows Meta Dosyası CMYK |
Bir OS/2 2.x OS22XBITMAPHEADER ( IBM belgelerinde BITMAPINFOHEADER2 ) 24 ek bayt içerir:
Ofset (altıgen) | Ofset (ara) | Boyut (bayt) | OS/2 OS22XBITMAPHEADER ( BITMAPINFOHEADER2 ) |
---|---|---|---|
36 | 54 | 2 | Yatay ve dikey çözünürlük birimlerini belirten numaralandırılmış bir değer (38 ve 42 ofsetleri). Tanımlanan tek değer 0'dır, yani metre başına piksel |
38 | 56 | 2 | Dolgu malzemesi. Yok sayıldı ve sıfır olmalı |
3 A | 58 | 2 | Bitlerin bit eşlemi doldurduğu yönü gösteren numaralandırılmış bir değer. Tanımlanan tek değer 0'dır, yani orijin sol alt köşedir. Bitler soldan sağa, ardından aşağıdan yukarıya doğru doldurulur.
Windows bitmap'lerinin (bu alanı içermeyen) ayrıca görüntü yüksekliği için negatif bir değer kullanarak sol üst bir orijini (bitler soldan sağa, sonra yukarıdan aşağıya doldurulur) belirtebileceğini unutmayın. |
3C | 60 | 2 | Görüntü oluşturulurken kullanılması gereken yarı tonlama algoritmasını gösteren numaralandırılmış bir değer. |
40 | 64 | 4 | Yarı tonlama parametresi 1 (aşağıya bakın) |
44 | 68 | 4 | Yarı tonlama parametresi 2 (aşağıya bakın) |
48 | 72 | 4 | Renk tablosundaki her giriş için renk kodlamasını gösteren numaralandırılmış bir değer. Tanımlanan tek değer 0'dır ve RGB'yi gösterir. |
4C | 76 | 4 | Uygulama tanımlı bir tanımlayıcı. Görüntü işleme için kullanılmaz |
Yarı tonlama algoritması (ofset 60) şöyle olabilir:
Değer | yarı tonlama algoritması | Yorumlar |
---|---|---|
0 | Yok | en yaygın |
1 | Hata yayılımı | Yarı tonlama parametresi 1 (ofset 64), hata sönümleme yüzdesidir. 100 sönümleme olmadığını gösterir. 0, hataların dağılmadığını gösterir |
2 | PANDA: Kodlanmamış Belge Alımı için İşleme Algoritması | Yarım tonlama parametreleri 1 ve 2 (sırasıyla ofsetler 64 ve 68), kullanılan yarım tonlama düzeninin sırasıyla piksel cinsinden X ve Y boyutlarını temsil eder |
3 | süper daire | Yarım tonlama parametreleri 1 ve 2 (sırasıyla ofsetler 64 ve 68), kullanılan yarım tonlama düzeninin sırasıyla piksel cinsinden X ve Y boyutlarını temsil eder |
Renk tablosu
Renk tablosu (palet), BMP görüntü dosyasında doğrudan BMP dosya başlığından, DIB başlığından sonra ve BI_BITFIELDS (12 bayt) veya BI_ALPHABITFIELDS (16 bayt) seçeneği ile BITMAPINFOHEADER başlığı kullanılıyorsa isteğe bağlı üç veya dört bit maskesinden sonra oluşur. . Bu nedenle, ofseti BITMAPFILEHEADER boyutu artı DIB başlığının boyutudur (artı üç veya dört bitlik maskeler için isteğe bağlı 12-16 bayt).
Not: Açık Windows CE BITMAPINFOHEADER başlık biCompression üyesi BI_ALPHABITFIELDS seçeneği ile kullanılabilir.
Paletinde girişlerin sayısı ya da 2'dir , n ya da başlığında belirtilen daha az sayıda (OS / 2 (burada n piksel başına bit sayısı) BITMAPCOREHEADER başlık biçiminde, sadece tam boy paleti desteklenir). Çoğu durumda, renk tablosundaki her giriş mavi, yeşil, kırmızı, 0x00 sırasına göre 4 bayt kaplar (istisnalar için aşağıya bakın). Bu, BITMAPINFOHEADER içinde biBitCount işlevi altında indekslenir .
Renk tablosu, görüntü tarafından kullanılan renkleri listeleyen bir bayt bloğudur (bir tablo). İndekslenmiş bir renkli görüntüdeki her piksel, bu tabloda açıklanan tek bir rengin indeksi olan bir dizi bit (1, 4 veya 8) ile tanımlanır. İndekslenmiş renk bitmaplerinde renk paletinin amacı, uygulamaya bu indeks değerlerinin her birinin karşılık geldiği gerçek renk hakkında bilgi vermektir. İndekslenmemiş (paletlenmemiş) bitmaplerdeki renk tablosunun amacı, bitmap tarafından sınırlı renk görüntüleme kabiliyetine sahip cihazlarda optimizasyon amacıyla kullanılan renkleri listelemek ve gelecekte farklı piksel formatlarına ve paletleştirmeye dönüştürmeyi kolaylaştırmaktır.
Renk tablosundaki renkler genellikle RGBA32 formatında giriş başına 4 bayt olarak belirtilir . OS/2 BITMAPCOREHEADER ile kullanılan renk tablosu, giriş başına 3 bayt RGB24 biçimini kullanır. Belleğe yüklenen DIB'ler için, renk tablosu isteğe bağlı olarak 2 baytlık girişlerden oluşabilir - bu girişler, açık RGB renk tanımları yerine şu anda gerçekleştirilmiş paletin dizinlerini oluşturur.
Microsoft, 1bpp, 4bpp ve 8bpp dizine alınmış renkli görüntüler için BITMAPV4HEADER ve BITMAPV5HEADER'da geçerli bir alfa kanalı bit maskesinin bulunmasına izin vermez; bu, renk tablosu girişlerinin 8.8.8 kullanarak bir alfa bileşeni belirtebileceğini gösterir.[0-8] ].[0-8] RGBQUAD.rgbReserved üyesi aracılığıyla biçimlendirin. Ancak, Microsoft'un belgelerinin bazı sürümleri, RGBQUAD.rgbReserved üyesinin "sıfır olması gerektiğini" belirterek bu özelliğe izin vermez.
Yukarıda bahsedildiği gibi, pikseller piksel başına 16 bit (16bpp) formatında (ve daha yüksek) olduğunda renk tablosu normalde kullanılmaz; bu bitmap görüntü dosyalarında normalde renk tablosu girişi yoktur. Ancak, Microsoft belgeleri (16 Kasım 2010 itibariyle MSDN web sitesinde), 16bpp (ve üstü) için, sınırlı renkli görüntüleme özelliğine sahip cihazlarda optimizasyona yönelik bir renk listesini depolamak için renk tablosunun mevcut olabileceğini belirtir. , aynı zamanda, bu gibi durumlarda, bu Renk Tablosunda dizine alınmış palet girişi bulunmadığını da belirtir. Zorunlu palet girişleri ile isteğe bağlı renk listesi arasında bir ayrım yapılmadığında bu bir çelişki gibi görünebilir.
Piksel depolama
Bitmap piksellerini temsil eden bitler satırlar halinde paketlenir . Her satırın boyutu, dolgu ile 4 baytın katına (32 bit DWORD ) yuvarlanır .
Yüksekliği 1'in üzerinde olan görüntüler için, bir Piksel Dizisi oluşturarak arka arkaya birden çok dolgulu satır depolanır.
Bir piksel sırasını depolamak için gerekli toplam bayt sayısı şu şekilde hesaplanabilir:
- ImageWidth piksel cinsinden ifade edilir. Yukarıdaki denklem taban ve tavan fonksiyonlarını kullanır .
2 n renkle piksel başına n bit (bpp) görüntüde bir piksel dizisini depolamak için gerekli toplam bayt sayısı, her satırın boyutunu 4 baytın katına yuvarlamanın etkisi hesaba katılarak hesaplanabilir. , aşağıdaki gibi:
- PixelArraySize = RowSize · | Resim Yüksekliği |
- ImageHeight piksel cinsinden ifade edilir. Mutlak değer gereklidir çünkü ImageHeight yukarıdan aşağıya görüntüler için negatif bir sayı olarak ifade edilir.
Piksel dizisi (bitmap verileri)
Piksel dizisi, görüntüyü piksel piksel tanımlayan 32 bitlik bir DWORD bloğudur. Pikseller genellikle sol alt köşeden başlayarak soldan sağa doğru "aşağıdan yukarıya" ve ardından görüntünün altından üstüne satır satır depolanır. BITMAPCOREHEADER kullanılmadığı sürece , Image Height değeri negatif olduğunda sıkıştırılmamış Windows bitmap'leri de yukarıdan aşağıya saklanabilir.
Orijinal OS/2 DIB'de, renk derinliğinin yalnızca dört yasal değeri piksel başına 1, 4, 8 ve 24 bit (bpp) idi. Çağdaş DIB Başlıkları, piksel başına 1, 2, 4, 8, 16, 24 ve 32 bitlik (bpp) piksel biçimlerine izin verir. GDI+ ayrıca piksel başına 64 bit'e izin verir.
Satırların uzunluğunu dört baytın katına çıkarmak için satırların sonuna doldurma baytları (mutlaka 0 olması gerekmez) eklenmelidir. Piksel dizisi belleğe yüklendiğinde, her satır 4'ün katı olan bir bellek adresinde başlamalıdır. Bu adres/offset kısıtlaması yalnızca belleğe yüklenen Piksel Dizileri için zorunludur. Dosya depolama amaçları için, dosya ofseti isteğe bağlı olabilirken yalnızca her satırın boyutu 4 baytın katı olmalıdır. Genişlik=1 olan 24 bitlik bir bitmap, satır başına 3 bayt veriye (mavi, yeşil, kırmızı) ve 1 bayt dolguya sahip olurken, Genişlik=2 6 bayt veriye ve 2 bayt dolguya sahip olur, Genişlik=3 9 bayt veriye ve 3 bayt dolguya sahip olur ve Genişlik=4 12 bayt veriye sahip olur ve dolgu içermez.
Sıkıştırma
- İndekslenmiş renkli görüntüler, 4-bit veya 8-bit RLE veya Huffman 1D algoritması ile sıkıştırılabilir .
- OS/2 BITMAPCOREHEADER 2 24bpp görüntüler, 24 bit RLE algoritması ile sıkıştırılabilir.
- 16bpp ve 32bpp görüntüleri vardır hep sıkıştırılmamış saklanan.
- Tüm renk derinliklerindeki görüntülerin istenirse sıkıştırılmadan saklanabileceğini unutmayın.
Piksel biçimi
- Piksel başına 1 bit (1bpp) biçimi, 2 farklı rengi destekler (örneğin: siyah ve beyaz). Piksel değerleri, ilk (en soldaki) piksel ilk baytın en anlamlı bitinde olacak şekilde her bitte saklanır. Her bit, 2 renkten oluşan bir tabloya bir dizindir. Ayarlanmamış bir bit, ilk renk tablosu girişini ve ayarlanmış bir bit, son (ikinci) renk tablosu girişini ifade edecektir.
- Piksel başına 2 bit (2bpp) biçimi 4 farklı rengi destekler ve 1 bayt başına 4 piksel depolar, en soldaki piksel en önemli iki bittedir ( yalnızca Windows CE :). Her piksel değeri, 4 renge kadar bir tabloya 2 bitlik bir dizindir.
- Piksel başına 4 bit (4bpp) biçimi, 16 farklı rengi destekler ve 1 bayt başına 2 piksel depolar; en soldaki piksel, daha önemli olan nibble'dadır . Her piksel değeri, 16 renge kadar bir tabloya 4 bitlik bir dizindir.
- Piksel başına 8 bit (8bpp) formatı 256 farklı rengi destekler ve 1 bayt başına 1 piksel depolar. Her bayt, 256 renge kadar bir tabloya bir dizindir.
- Piksel başına 16 bit (16bpp) formatı 65536 farklı rengi destekler ve 2 baytlık WORD başına 1 piksel depolar. Her WORD , pikselin alfa, kırmızı, yeşil ve mavi örneklerini tanımlayabilir .
- 24 bit piksel (24bpp) formatı 16.777.216 farklı rengi destekler ve 3 bayt başına 1 piksel değeri depolar. Her piksel değeri, pikselin kırmızı, yeşil ve mavi örneklerini tanımlar (RGBAX gösteriminde 8.8.8.0.0). Özellikle, sırayla: mavi, yeşil ve kırmızı (her örnek için 8 bit).
- Piksel başına 32 bit (32bpp) biçimi 4,294,967,296 farklı rengi destekler ve 4 baytlık DWORD başına 1 piksel depolar. Her DWORD, pikselin alfa, kırmızı, yeşil ve mavi örneklerini tanımlayabilir.
Hangi bitlerin hangi örnekleri tanımladığı belirsizliğini çözmek için, DIB başlıkları belirli varsayılanların yanı sıra belirli bir pikseldeki belirli bit gruplarının belirli bir kanala üyeliğini tanımlayan bit maskeleri olan belirli BITFIELDS sağlar . Aşağıdaki şema bu mekanizmayı tanımlar:
BITFIELDS bit maskeleri tarafından tanımlanan örnek alanlar bitişik olmalı ve örtüşmemelidir, ancak örnek alanların sırası isteğe bağlıdır. En yaygın alan sırası şudur: Alfa, Mavi, Yeşil, Kırmızı (MSB'den LSB'ye). Kırmızı, yeşil ve mavi bit maskeleri yalnızca DIB başlığının Sıkıştırma üyesi BI_BITFIELDS olarak ayarlandığında geçerlidir. Alfa bit maskesi, DIB başlığında mevcut olduğunda veya DIB başlığının Sıkıştırma üyesi BI_ALPHABITFIELDS olarak ayarlandığında geçerlidir ( yalnızca Windows CE ).
RGB video alt türleri
Yukarıda açıklanan BITFIELD mekanizması, on binlerce farklı piksel formatının tanımlanmasına izin verir, ancak pratikte bunlardan yalnızca birkaçı kullanılır, tüm paletlenmiş formatlar RGB8, RGB4 ve RGB1 (yukarıdaki tabloda sarı ile işaretlenmiştir, dshow.h
MEDIASUBTYPE adları) ve:
RGBAX | RGB alt türü | RGBAX | ARGB alt türü |
---|---|---|---|
8.8.8.0.8 | RGB32 | 8.8.8.8.0 | ARGB32 |
10.10.10.2.0 | A2R10G10B10 | ||
8.8.8.0.0 | RGB24 | 10.10.10.2.0 | A2B10G10R10 |
5.6.5.0.0 | RGB565 | 4.4.4.4.0 | ARGB4444 |
5.5.5.0.1 | RGB555 | 5.5.5.1.0 | ARGB1555 |
bit alanı | Telafi etmek | bitler A2R10G10B10 | bitler A2B10G10R10 | ||||
---|---|---|---|---|---|---|---|
kırmızı | 36 saat |
00 00 F0 3F
|
LE: 3FF00000
|
20 …29
|
FF 03 00 00
|
LE: 000003FF
|
0 … 9
|
Yeşil | 3Ah |
00 FC 0F 00
|
LE: 000FFC00
|
10 …19
|
00 FC 0F 00
|
LE: 000FFC00
|
10 …19
|
Mavi | 3Eh |
FF 03 00 00
|
LE: 000003FF
|
0 … 9
|
00 00 F0 3F
|
LE: 3FF00000
|
20 …29
|
Alfa | 42 saat |
00 00 00 C0
|
LE: C0000000
|
30 …31
|
00 00 00 C0
|
LE: C0000000
|
30 …31
|
2.1.4 sürümünde FFmpeg (kendi terminolojisinde) bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, gray, pal8 ve monob BMP piksel formatlarını destekler ; yani, saydamlığa sahip tek desteklenen piksel biçimi bgra idi.
örnek 1
Aşağıda RGB24 piksel biçimine sahip 2×2 piksel, 24 bit bit eşlem (Windows DIB başlığı BITMAPINFOHEADER ) örneği verilmiştir .
Telafi etmek | Boy | onaltılık değer | Değer | Açıklama |
---|---|---|---|---|
BMP Başlığı | ||||
0 saat | 2 | 42 4D | "BM" | Kimlik alanı (42h, 4Dh) |
2 saat | 4 | 46 00 00 00 | 70 bayt (54+16) | BMP dosyasının boyutu (54 bayt başlık + 16 bayt veri) |
6h | 2 | 00 00 | kullanılmamış | Uygulamaya özel |
8 saat | 2 | 00 00 | kullanılmamış | Uygulamaya özel |
Ah | 4 | 36 00 00 00 | 54 bayt (14+40) | Piksel dizisinin (bit eşlem verileri) bulunabileceği yer kayması |
DIB Başlığı | ||||
Eh | 4 | 28 00 00 00 | 40 bayt | DIB başlığındaki bayt sayısı (bu noktadan itibaren) |
12 saat | 4 | 02 00 00 00 | 2 piksel (soldan sağa sıra) | Bitmap'in piksel cinsinden genişliği |
16h | 4 | 02 00 00 00 | 2 piksel (alttan üste doğru) | Bitmap'in piksel cinsinden yüksekliği. Alttan üste piksel sıralaması için pozitif. |
1 Ah | 2 | 01 00 | 1 uçak | Kullanılan renk düzlemlerinin sayısı |
1 Kanal | 2 | 18 00 | 24 bit | Piksel başına bit sayısı |
1Eh | 4 | 00 00 00 00 | 0 | BI_RGB, piksel dizisi sıkıştırması kullanılmadı |
22 saat | 4 | 10 00 00 00 | 16 bayt | Ham bitmap verilerinin boyutu (dolgu dahil) |
26 saat | 4 | 13 0B 00 00 | 2835 piksel/metre yatay | Resmin baskı çözünürlüğü, metre başına 72 DPI × 39.3701 inç verim 2834.6472 |
2Ah | 4 | 13 0B 00 00 | 2835 piksel/metre dikey | |
2Eh | 4 | 00 00 00 00 | 0 renk | Paletteki renk sayısı |
32 saat | 4 | 00 00 00 00 | 0 önemli renk | 0, tüm renklerin önemli olduğu anlamına gelir |
Piksel dizisinin başlangıcı (bitmap verileri) | ||||
36 saat | 3 | 00 00 FF | 0 0 255 | Kırmızı, Piksel (0,1) |
39 saat | 3 | FF FF FF | 255 255 255 | Beyaz, Piksel (1,1) |
3Ch | 2 | 00 00 | 0 0 | 4 bayt hizalama için dolgu (sıfırdan farklı bir değer olabilir) |
3Eh | 3 | FF 00 00 | 255 0 0 | Mavi, Piksel (0,0) |
41 saat | 3 | 00 FF 00 | 0 255 0 | Yeşil, Piksel (1,0) |
44h | 2 | 00 00 | 0 0 | 4 bayt hizalama için dolgu (sıfırdan farklı bir değer olabilir) |
Örnek 2
Aşağıda, piksel biçimi ARGB32 olan alfa kanalında (Windows DIB Başlığı BITMAPV4HEADER ) opaklık değerlerine sahip 4×2 piksel, 32 bit bit eşlem örneği verilmiştir.
Telafi etmek | Boy | onaltılık değer | Değer | Açıklama |
---|---|---|---|---|
BMP Başlığı | ||||
0 saat | 2 | 42 4D | "BM" | Kimlik alanı (42h, 4Dh) |
2 saat | 4 | 9A 00 00 00 | 154 bayt (122+32) | BMP dosyasının boyutu |
6h | 2 | 00 00 | kullanılmamış | Uygulamaya özel |
8 saat | 2 | 00 00 | kullanılmamış | Uygulamaya özel |
Ah | 4 | 7A 00 00 00 | 122 bayt (14+108) | Piksel dizisinin (bit eşlem verileri) bulunabileceği yer kayması |
DIB Başlığı | ||||
Eh | 4 | 6C 00 00 00 | 108 bayt | DIB başlığındaki bayt sayısı (bu noktadan itibaren) |
12 saat | 4 | 04 00 00 00 | 4 piksel (soldan sağa sıra) | Bitmap'in piksel cinsinden genişliği |
16h | 4 | 02 00 00 00 | 2 piksel (alttan üste doğru) | Bitmap'in piksel cinsinden yüksekliği |
1 Ah | 2 | 01 00 | 1 uçak | Kullanılan renk düzlemlerinin sayısı |
1 Kanal | 2 | 20 00 | 32 bit | Piksel başına bit sayısı |
1Eh | 4 | 03 00 00 00 | 3 | BI_BITFIELDS, piksel dizisi sıkıştırması kullanılmadı |
22 saat | 4 | 20 00 00 00 | 32 bayt | Ham bitmap verilerinin boyutu (dolgu dahil) |
26 saat | 4 | 13 0B 00 00 | 2835 piksel/metre yatay | Resmin baskı çözünürlüğü, metre başına 72 DPI × 39.3701 inç verim 2834.6472 |
2Ah | 4 | 13 0B 00 00 | 2835 piksel/metre dikey | |
2Eh | 4 | 00 00 00 00 | 0 renk | Paletteki renk sayısı |
32 saat | 4 | 00 00 00 00 | 0 önemli renk | 0, tüm renklerin önemli olduğu anlamına gelir |
36 saat | 4 | 00 00 FF 00 | 00FF0000 büyük endian | Kırmızı kanal bit maskesi (BI_BITFIELDS belirtildiği için geçerlidir) |
3Ah | 4 | 00 FF 00 00 | 0000FF00 büyük endian | Yeşil kanal bit maskesi (BI_BITFIELDS belirtildiği için geçerlidir) |
3Eh | 4 | FF 00 00 00 | büyük endian 000000FF | Mavi kanal bit maskesi (BI_BITFIELDS belirtildiği için geçerlidir) |
42 saat | 4 | 00 00 00 FF | büyük endian olarak FF000000 | Alfa kanalı bit maskesi |
46h | 4 | 20 6E 69 57 | küçük endian " Win "
|
LCS_WINDOWS_COLOR_SPACE |
4Ah | 24 saat | 24s* 00...00 | CIEXYZTRIPLE Renk Alanı uç noktaları | LCS " Win " veya " sRGB " için kullanılmaz
|
6Eh | 4 | 00 00 00 00 | 0 Kırmızı Gama | LCS " Win " veya " sRGB " için kullanılmaz
|
72 saat | 4 | 00 00 00 00 | 0 Yeşil Gama | LCS " Win " veya " sRGB " için kullanılmaz
|
76h | 4 | 00 00 00 00 | 0 Mavi Gama | LCS " Win " veya " sRGB " için kullanılmaz
|
Piksel Dizisinin Başlangıcı (bitmap Verileri) | ||||
7Ah | 4 | FF 00 00 7F | 255 0 0 127 | Mavi (Alfa: 127), Piksel (1,0) |
7Eh | 4 | 00 FF 00 7F | 0 255 0 127 | Yeşil (Alfa: 127), Piksel (1,1) |
82 saat | 4 | 00 00 FF 7F | 0 0 255 127 | Kırmızı (Alfa: 127), Piksel (1,2) |
86h | 4 | FF FF FF 7F | 255 255 255 127 | Beyaz (Alfa: 127), Piksel (1,3) |
8Ah | 4 | FF 00 00 FF | 255 0 0 255 | Mavi (Alfa: 255), Piksel (0,0) |
8Eh | 4 | 00 FF 00 FF | 0 255 0 255 | Yeşil (Alfa: 255), Piksel (0,1) |
92 saat | 4 | 00 00 FF FF | 0 0 255 255 | Kırmızı (Alfa: 255), Piksel (0,2) |
96h | 4 | FF FF FF FF FF | 255 255 255 255 | Beyaz (Alfa: 255), Piksel (0,3) |
Bitmap verilerinin görüntünün sol alt köşesiyle başladığını unutmayın.
BMP formatının kullanımı
BMP dosya formatının basitliği ve Windows'ta ve başka yerlerde yaygın olarak bilinmesi ve bu formatın nispeten iyi belgelenmiş olması ve açık bir formata sahip olması , BMP'yi birçok işletim sisteminden görüntü işleme programlarının yapabileceği çok yaygın bir format haline getirir. oku ve yaz. ICO ve CUR dosyaları, bir BITMAPINFOHEADER ile başlayan bitmapler içerir.
Birçok eski grafik kullanıcı arabirimi , yerleşik grafik alt sistemlerinde bit eşlemler kullandı; örneğin, Microsoft Windows ve OS / 2 platformların GDI kullanılan özel biçimidir alt sistemi, , Windows ve OS / 2 Bitmap dosya formatı , genellikle ile adlandırılmış dosya uzantısına ait .BMP
.
Çoğu BMP dosyası, herhangi bir sıkıştırma olmaması (veya paletlenmiş görüntülerde genellikle düşük oranlı çalışma uzunluğu kodlaması ) nedeniyle nispeten büyük bir dosya boyutuna sahipken , birçok BMP dosyası, fazlalık içerdiğinden ZIP gibi kayıpsız veri sıkıştırma algoritmalarıyla önemli ölçüde sıkıştırılabilir. veri. RAR gibi bazı formatlar, özellikle bu tür verilerin verimli bir şekilde sıkıştırılmasını hedefleyen rutinleri bile içerir.
İlgili biçimler
X Pencere Sistemi benzer kullanır XBM siyah-beyaz görüntüler için biçim ve XPM ( pixelmap ) renkli görüntüler için. Ham verileri başka hiçbir bilgi olmadan kaydeden çeşitli "ham" biçimler de vardır. Taşınabilir Pixmap (PPM) ve Truevision TGA biçimlerini de mevcut olmakla birlikte daha az sıklıkta kullanılır - ya sadece özel amaçlar için; örneğin, TGA şeffaflık bilgilerini içerebilir.
Referanslar
Dış bağlantılar
- Bitmap Dosya Yapısı , digicamsoft.com'da
- herdsoft.com'da DIB'lere (Aygıttan Bağımsız Bit Eşlemler ) giriş
- kalytta.com'da basit bir bitmap yükleyici C++ sınıfı (A2R10G10B10 henüz desteklenmiyor)
- The BMP Dosya Formatı, Bölüm 1 David Charlap tarafından Dr. Dobb'un yazılım araçları dergisinde (drdobbs.com), Mart 1995