Jenis Header Bitmap
Bitmap memiliki empat jenis header dasar:
Empat jenis header bitmap dibedakan oleh anggota Ukuran, yang merupakan DWORD pertama di setiap struktur.
Struktur BITMAPV5HEADER adalah struktur BITMAPV4HEADER yang diperluas, yang merupakan struktur BITMAPINFOHEADER yang diperluas. Namun, BITMAPINFOHEADER dan BITMAPCOREHEADER hanya memiliki anggota Ukuran yang sama dengan struktur header bitmap lainnya.
Format BITMAPCOREHEADER dan BITMAPV4HEADER telah digantikan oleh BITMAPINFOHEADER dan format BITMAPV5HEADER. Format BITMAPCOREHEADER dan BITMAPV4HEADER disajikan untuk kelengkapan dan kompatibilitas mundur.
Format untuk DIB adalah sebagai berikut (untuk informasi selengkapnya, lihat Penyimpanan Bitmap ):
- struktur BITMAPFILEHEADER
- baik BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER, atau struktur BITMAPV5HEADER.
- tabel warna opsional, yang merupakan sekumpulan struktur RGBQUAD atau satu set struktur RGBTRIPLE.
- data bitmap
- data Profil opsional
Tabel warna menjelaskan bagaimana nilai piksel sesuai dengan nilai warna RGB. RGB adalah model untuk menjelaskan warna yang diproduksi dengan memancarkan cahaya.
Data profil mengacu pada nama file profil (profil tertaut) atau bit profil aktual (profil yang disematkan). Format file menempatkan data profil di akhir file. Data profil ditempatkan tepat setelah tabel warna (jika ada). Namun, jika fungsi menerima DIB yang dikemas, data profil muncul setelah bitmap, seperti dalam format file.
Data profil hanya akan ada untuk struktur BITMAPV5HEADER di mana bV5CSType PROFILE_LINKED atau PROFILE_EMBEDDED. Untuk fungsi yang menerima DIB kemasan, data profil muncul setelah data bitmap.
Perangkat yang diplettisasi adalah perangkat apa pun yang menggunakan palet untuk menetapkan warna. Contoh klasik perangkat yang dipalettisasi adalah tampilan yang berjalan dalam kedalaman warna 8 bit (yaitu, 256 warna). Tampilan dalam mode ini menggunakan tabel warna kecil untuk menetapkan warna ke bitmap. Warna dalam bitmap ditetapkan ke warna terdekat di palet yang digunakan perangkat. Perangkat yang dipalettkan tidak membuat palet optimal untuk menampilkan bitmap; itu hanya menggunakan apa pun yang ada di palet saat ini. Aplikasi bertanggung jawab untuk membuat palet dan memilihnya ke dalam sistem. Secara umum, bitmap 16-, 24-, dan 32-bit per piksel (bpp) tidak berisi tabel warna (alias palet optimal untuk bitmap); aplikasi bertanggung jawab untuk menghasilkan palet optimal dalam hal ini. Namun, bitmap 16-, 24-, dan 32 bpp dapat berisi tabel warna optimal untuk ditampilkan pada perangkat yang dipalettkan; dalam hal ini aplikasi hanya perlu membuat palet berdasarkan tabel warna yang ada dalam file bitmap.
Bitmap yang 1, 4, atau 8 bpp harus memiliki tabel warna dengan ukuran maksimum berdasarkan bpp. Ukuran maksimum untuk bitmap 1, 4, dan 8 bpp adalah 2 hingga daya bpp. Dengan demikian, bitmap 1 bpp memiliki maksimum dua warna, bitmap 4 bpp memiliki maksimum 16 warna, dan bitmap 8 bpp memiliki maksimum 256 warna.
Bitmap yang 16-, 24-, atau 32-bpp tidak memerlukan tabel warna, tetapi mungkin memilikinya untuk menentukan warna untuk perangkat palettized. Jika tabel warna ada untuk bitmap 16-, 24-, atau 32 bpp, anggota biClrUsed menentukan ukuran tabel warna dan tabel warna harus memiliki banyak warna di dalamnya. Jika biClrUsed adalah nol, tidak ada tabel warna.
Masker bitfield merah, hijau, dan biru untuk bitmap BI_BITFIELD segera mengikuti struktur BITMAPINFOHEADER, BITMAPV4HEADER, dan BITMAPV5HEADER. Struktur BITMAPV4HEADER dan BITMAPV5HEADER berisi anggota tambahan untuk masker merah, hijau, dan biru sebagai berikut.
Anggota | Makna |
---|---|
RedMask | Masker warna yang menentukan komponen merah dari setiap piksel, hanya valid jika anggota Kompresi diatur ke BI_BITFIELDS. |
GreenMask | Masker warna yang menentukan komponen hijau dari setiap piksel, hanya valid jika anggota Kompresi diatur ke BI_BITFIELDS. |
BlueMask | Masker warna yang menentukan komponen biru dari setiap piksel, hanya valid jika anggota Kompresi diatur ke BI_BITFIELDS. |
Ketika anggota biCompression BITMAPINFOHEADER diatur ke BI_BITFIELDS dan fungsi menerima argumen jenis LPBITMAPINFO, masker warna akan segera mengikuti header. Tabel warna, jika ada, akan mengikuti masker warna. Bitmap BITMAPCOREHEADER tidak mendukung masker warna.
Secara default, data bitmap berada di bawah ke atas dalam formatnya. Bottom-up berarti bahwa baris pemindaian pertama dalam data bitmap adalah baris pemindaian terakhir yang akan ditampilkan. Misalnya, piksel ke-0 dari baris pemindaian ke-0 dari data bitmap 10 piksel dengan bitmap 10 piksel akan menjadi piksel ke-0 dari baris pemindaian ke-9 dari gambar yang ditampilkan atau dicetak. Bitmap format run-length encoded (RLE) dan bitmap BITMAPCOREHEADER tidak boleh bitmap atas ke bawah. Baris pemindaian diratakan DWORD , kecuali bitmap yang dikompresi RLE. Mereka harus diisi untuk memindai lebar garis, dalam byte, yang tidak dapat dibagi secara merata oleh empat, kecuali untuk bitmap terkompresi RLE. Misalnya, bitmap 10 dengan 10 piksel 24 bpp akan memiliki dua byte padding di akhir setiap baris pemindaian.