Format File
Apa Itu BMP? Penjelasan Format Bitmap
BMP adalah format bitmap Windows yang tidak terkompresi dan lossless. Kami menjelaskan struktur header, kedalaman warna, batasan, dan cara memperkecil file-nya.
Penulis: Hemen Dönüştür Editör EkibiDiterbitkan: 7 menit baca

BMP adalah salah satu format gambar tertua dan paling sederhana di dunia Windows. File BMP biasanya menulis piksel ke disk baris demi baris tanpa kompresi sama sekali. Kesederhanaan itu membuatnya mudah dibaca dan lossless, tetapi kesederhanaan yang sama juga membuat file-nya sangat besar. Artikel ini membahas asal-usul BMP, isi file-nya, detail kedalaman warna dan transparansi, di mana Anda masih menjumpainya saat ini, serta cara mengonversi file BMP ke format yang lebih praktis.
Apa itu BMP?
BMP (bitmap, ekstensi .bmp) adalah format file gambar raster berbasis piksel. Dokumentasi teknis juga menyebutnya DIB, device-independent bitmap. "Device-independent" berarti gambar bisa ditafsirkan dengan cara yang sama terlepas dari kartu grafis atau printer tempat gambar itu dibuat: file membawa informasi yang dibutuhkan untuk menerjemahkan warnanya di header dan tabel warnanya sendiri.
Menurut dokumentasi Win32 dari Microsoft, file bitmap diawali struktur BITMAPFILEHEADER, diikuti BITMAPINFOHEADER, BITMAPV4HEADER, atau BITMAPV5HEADER, lalu tabel warna opsional, dan terakhir data piksel. MIME type-nya adalah image/bmp.
Sejarah singkat: dari Windows dan OS/2 hingga sekarang
BMP lahir dari kerja sama Microsoft dan IBM untuk Windows dan OS/2 pada akhir 1980-an. Bitmap di era Windows 1.0 sangat bergantung pada perangkat keluaran; bentuk yang independen dari perangkat mulai meluas bersama Windows 3.0 pada 1990. BITMAPCOREHEADER berukuran 12 byte yang didefinisikan untuk OS/2 Presentation Manager adalah alasan orang masih menyebut file "BMP OS/2".
Selama bertahun-tahun, format ini diperluas dengan menambahkan field di akhir header. Menurut deskripsi format dari Library of Congress, versi 5 hadir bersama Windows 98 pada 1998 dan memungkinkan profil warna ICC dicatat di dalam file. Ukuran header yang umum saat ini adalah:
| Header | Ukuran | Tambahan utama |
|---|---|---|
| BITMAPCOREHEADER | 12 byte | Struktur dasar yang kompatibel dengan OS/2 1.x |
| BITMAPINFOHEADER | 40 byte | Header paling umum, sejak Windows 3.0; field kompresi dan resolusi |
| BITMAPV4HEADER | 108 byte | Mask warna, mask alfa, dan informasi ruang warna |
| BITMAPV5HEADER | 124 byte | Profil ICC tersemat atau tertaut, rendering intent |
Pembaca mendeteksi header mana yang dipakai dari nilai ukuran di field pertamanya. Dengan begitu, perangkat lunak lama bisa mengabaikan field yang lebih baru dan tetap membaca bagian dasarnya.
Isi file BMP
Header file dan tanda tangan "BM"
Setiap file BMP diawali header file 14 byte, dan dua byte pertamanya adalah karakter ASCII BM (heksadesimal 42 4D). Header ini menyimpan ukuran total file dan offset byte tempat data piksel dimulai. DIB yang ditaruh di clipboard Windows (format CF_DIB) tidak menyertakan 14 byte ini dan langsung diawali header info.
Header info
Header info menyimpan lebar, tinggi, bit per piksel (biBitCount), jenis kompresi, resolusi horizontal dan vertikal (dalam piksel per meter), dan jumlah warna yang dipakai di tabel warna.
Tabel warna (palet)
Pada gambar dengan 8 bit per piksel atau kurang, sebuah piksel bukanlah warna, melainkan indeks ke tabel warna. Dalam contoh yang didokumentasikan Microsoft, bitmap 32x32 dengan 16 warna memiliki larik piksel sebesar 32 x 32 x 4 = 4096 bit, karena 4 bit sudah cukup untuk menunjuk 16 warna.
Data piksel: baris dari bawah ke atas dan penjajaran 4 byte
BMP punya dua sifat yang tidak biasa. Pertama, jika tingginya positif, baris disimpan dari bawah ke atas: baris pertama di file adalah baris paling bawah gambar. Tinggi negatif menyimpan baris dari atas ke bawah, tetapi gambar seperti itu tidak bisa dikompresi. Kedua, setiap baris diberi padding hingga kelipatan 4 byte. Microsoft memberikan rumus panjang baris (stride) sebagai berikut:
stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride
Untuk gambar 1920x1080 dengan 24 bit, setiap baris berukuran 1920 x 3 = 5.760 byte (sudah kelipatan 4), sehingga data pikselnya 5.760 x 1.080 = 6.220.800 byte. Dengan header 54 byte, file-nya sekitar 6,2 MB. Gambar yang sama sebagai JPG biasanya hanya sebagian kecil dari ukuran itu.
Kedalaman warna, kompresi, dan transparansi
Dokumentasi BITMAPV5HEADER mendefinisikan 1, 4, 8, 16, 24, dan 32 bit per piksel (nilai 0 berarti kedalaman ditentukan oleh data JPEG atau PNG yang tersemat). 1 bit berarti hitam putih, 4 bit berarti 16 warna, dan 8 bit berarti palet 256 warna. Pada 24 bit, setiap piksel terdiri atas tiga byte dengan urutan biru, hijau, merah.
Field kompresi bisa bernilai sebagai berikut:
- BI_RGB: Tanpa kompresi. Dalam praktiknya, sebagian besar file BMP.
- BI_RLE8 dan BI_RLE4: Run-length encoding sederhana untuk gambar palet 8-bit dan 4-bit. Berguna untuk area datar yang luas, hampir tidak berguna untuk foto.
- BI_BITFIELDS: Bukan kompresi; mask menentukan letak bit merah, hijau, dan biru dalam piksel 16-bit dan 32-bit (misalnya RGB 565).
- BI_JPEG dan BI_PNG: Mengizinkan data JPEG atau PNG di dalam bitmap. Jarang didukung penampil umum.
Transparansi adalah area BMP yang paling tidak konsisten. Mask alfa di header V4 dan V5 bisa mendefinisikan byte keempat piksel 32-bit sebagai opasitas, tetapi pada BMP 32-bit klasik byte itu dideskripsikan sebagai tidak terpakai dan banyak program mengabaikannya. Jadi, BMP 32-bit yang tampak transparan di satu program dan berlatar hitam di program lain bukanlah hal yang aneh. Jika Anda membutuhkan transparansi, PNG adalah pilihan yang jauh lebih aman.
Dukungan di sistem, browser, dan perangkat lunak
BMP bisa dibuka hampir di mana saja. Penampil bawaan Windows dan Paint, Preview di macOS, dan penampil umum di Linux semuanya bisa membacanya. Panduan format gambar MDN mencantumkan dukungan BMP di semua versi Chrome, Edge, Firefox, Opera, dan Safari. Panduan yang sama juga menegaskan bahwa file BMP tanpa kompresi sangat besar dibandingkan PNG atau JPG dan umumnya sebaiknya dihindari untuk konten situs web.
Di mana BMP digunakan saat ini?
- Sumber daya aplikasi Windows dan perangkat lunak lama: Gambar toolbar, grafik wizard instalasi, dan sebagian aset game masih berupa BMP.
- Sistem tertanam dan mikrokontroler: Perangkat berlayar tidak memerlukan decoder JPEG; data piksel bisa langsung disalin ke layar.
- Kamera industri, pemindai, dan alat uji: Saat dibutuhkan keluaran mentah yang lossless, BMP adalah format perantara yang sederhana.
- Pengajaran: Dengan header yang hanya beberapa puluh byte, BMP sering menjadi format pertama yang dibaca dan ditulis mahasiswa dalam mata kuliah pengolahan citra.
Kelebihan dan kekurangan
| Kelebihan | Kekurangan |
|---|---|
| Lossless; nilai piksel tidak pernah berubah | Tanpa kompresi, sehingga file sangat besar |
| Sangat mudah dibaca dan ditulis, tanpa beban CPU | Dukungan transparansi tidak konsisten |
| Bisa dibuka di hampir semua sistem operasi dan browser | Dukungan metadata lemah (EXIF, deskripsi) |
| Mode palet cocok untuk perangkat bersumber daya rendah | Tidak praktis untuk web, email, dan formulir unggah |
Masalah umum dan cara mengatasinya
File terlalu besar untuk email atau formulir unggah
Ini masalah yang paling umum. Untuk foto dan hasil pindaian, mengonversi BMP ke JPG biasanya memangkas ukuran hingga sepersepuluhnya atau lebih. Untuk tangkapan layar, diagram, atau apa pun yang berisi teks, mengonversi BMP ke PNG lebih baik: PNG juga lossless tetapi terkompresi, dan tidak menambahkan noise yang ditimbulkan JPG di sekitar tepi yang tajam.
BMP 32-bit menampilkan latar hitam
Program tidak mengenali atau salah membaca byte alfa. Mengonversi ke PNG biasanya menyelesaikannya. Saat mengonversi ke JPG, yang tidak memiliki transparansi, area transparan diisi putih atau warna pilihan Anda.
Gambar terbalik atau miring
Pada pembaca yang Anda tulis sendiri, hal ini biasanya berasal dari dua kesalahan: mengabaikan bahwa baris disimpan dari bawah ke atas, atau tidak melewati byte padding di akhir setiap baris. Memakai rumus stride di atas dan memeriksa tanda tinggi gambar mencegah keduanya.
Program menolak membuka BMP
File BMP dengan kompresi RLE, BI_BITFIELDS, atau data JPEG/PNG tersemat tidak didukung sebagian pembaca sederhana. Menyimpan ulang sebagai BMP 24-bit tanpa kompresi atau mengonversi ke PNG menghilangkan masalah kompatibilitas ini.
Tips konversi
- JPG untuk foto, PNG untuk grafik: Aturan umum ini berlaku saat meninggalkan BMP. Untuk web, Anda juga bisa memilih WebP atau AVIF di konverter gambar.
- Pertahankan kualitas tinggi: Karena BMP lossless, kualitas JPG 85-90% memberi hasil yang sulit dibedakan dari aslinya.
- Perkecil bila perlu: Jika file masih besar, kurangi dimensi pikselnya atau gunakan kompres gambar untuk mencapai ukuran target.
- Untuk arah sebaliknya: Jika perangkat tertanam atau program lama membutuhkan BMP, pilih BMP sebagai tujuan di konverter gambar. Alat kami menulis BMP 24-bit standar tanpa kompresi; area transparan diratakan ke warna latar yang Anda pilih.
Halaman konversi BMP kami berjalan di browser Anda: file tidak diunggah dan tidak pernah meninggalkan perangkat Anda.
Pertanyaan yang Sering Diajukan
Apakah BMP dan DIB sama?
Dalam praktiknya, ya. DIB adalah struktur bitmap yang independen dari perangkat yang dipakai Windows di memori dan clipboard; file BMP adalah struktur itu dengan header file 14 byte di depannya.
Apakah BMP lossless?
Ya. File BMP tanpa kompresi dan yang dikompresi RLE mempertahankan nilai piksel secara persis. Satu-satunya pengecualian adalah BMP langka yang berisi data JPEG tersemat.
Apakah mengonversi BMP ke PNG menurunkan kualitas?
Tidak. PNG juga lossless; gambarnya tetap identik dan hanya menjadi lebih kecil karena dikompresi.
Bisakah BMP dipakai di situs web?
Browser bisa menampilkan BMP, tetapi file-nya besar tanpa perlu dan memperlambat halaman. Gunakan JPG, PNG, WebP, atau AVIF untuk web.
Apakah BMP mendukung transparansi?
BMP 32-bit secara teori bisa membawa kanal alfa, tetapi dukungan perangkat lunaknya tidak konsisten. PNG adalah pilihan yang lebih aman setiap kali Anda membutuhkan transparansi.


