Struktur BITMAPINFOHEADER (wingdi.h)

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Struktur BITMAPINFOHEADER berisi informasi tentang dimensi dan format warna bitmap independen perangkat (DIB).

Catatan Struktur ini juga dijelaskan dalam dokumentasi GDI. Namun, semantik untuk data video sedikit berbeda dari semantik yang digunakan untuk GDI. Jika Anda menggunakan struktur ini untuk menjelaskan data video, gunakan informasi yang diberikan di sini.
 

Sintaks

typedef struct tagBITMAPINFOHEADER {
  DWORD biSize;
  LONG  biWidth;
  LONG  biHeight;
  WORD  biPlanes;
  WORD  biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG  biXPelsPerMeter;
  LONG  biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

Anggota

biSize

Menentukan jumlah byte yang diperlukan oleh struktur. Nilai ini tidak termasuk ukuran tabel warna atau ukuran masker warna, jika ditambahkan ke akhir struktur. Lihat Keterangan.

biWidth

Menentukan lebar bitmap, dalam piksel. Untuk informasi tentang menghitung langkah bitmap, lihat Keterangan.

biHeight

Menentukan tinggi bitmap, dalam piksel.

  • Untuk bitmap RGB yang tidak dikompresi, jika biHeight positif, bitmap adalah DIB bawah-atas dengan asal di sudut kiri bawah. Jika biHeight negatif, bitmap adalah DIB atas ke bawah dengan asal di sudut kiri atas.
  • Untuk bitmap YUV, bitmap selalu top-down, terlepas dari tanda biHeight. Dekode harus menawarkan format YUV dengan biHeight positif, tetapi untuk kompatibilitas mundur, mereka harus menerima format YUV dengan biHeight positif atau negatif.
  • Untuk format terkompresi, biHeight harus positif, terlepas dari orientasi gambar.

biPlanes

Menentukan jumlah bidang untuk perangkat target. Nilai ini harus diatur ke 1.

biBitCount

Menentukan jumlah bit per piksel (bpp). Untuk format yang tidak dikompresi, nilai ini adalah jumlah rata-rata bit per piksel. Untuk format terkompresi, nilai ini adalah kedalaman bit tersirat dari gambar yang tidak dikompresi, setelah gambar didekodekan.

biCompression

Untuk format video dan YUV terkompresi, anggota ini adalah kode FOURCC, yang ditentukan sebagai DWORD dalam urutan little-endian. Misalnya, video YUYV memiliki FOURCC 'VYUY' atau 0x56595559. Untuk informasi selengkapnya, lihat Kode FOURCC.

Untuk format RGB yang tidak dikompresi, nilai berikut dimungkinkan:

Nilai Makna
BI_RGB
RGB yang tidak dikompresi.
BI_BITFIELDS
RGB yang tidak dikompresi dengan masker warna. Berlaku untuk bitmap 16-bpp dan 32 bpp.
 

Lihat Keterangan untuk informasi selengkapnya. Perhatikan bahwa BI_JPG dan BI_PNG bukan format video yang valid.

Untuk bitmap 16-bpp, jika biCompression sama dengan BI_RGB, formatnya selalu RGB 555. Jika biCompression sama dengan BI_BITFIELDS, formatnya adalah RGB 555 atau RGB 565. Gunakan GUID subjenis dalam struktur AM_MEDIA_TYPE untuk menentukan jenis RGB tertentu.

biSizeImage

Menentukan ukuran, dalam byte, gambar. Ini dapat diatur ke 0 untuk bitmap RGB yang tidak dikompresi.

biXPelsPerMeter

Menentukan resolusi horizontal, dalam piksel per meter, dari perangkat target untuk bitmap.

biYPelsPerMeter

Menentukan resolusi vertikal, dalam piksel per meter, dari perangkat target untuk bitmap.

biClrUsed

Menentukan jumlah indeks warna dalam tabel warna yang benar-benar digunakan oleh bitmap. Lihat Keterangan untuk informasi selengkapnya.

biClrImportant

Menentukan jumlah indeks warna yang dianggap penting untuk menampilkan bitmap. Jika nilai ini nol, semua warna penting.

Keterangan

Tabel Warna

Struktur BITMAPINFOHEADER dapat diikuti oleh array entri palet atau masker warna. Aturan tergantung pada nilai biCompression.
  • Jika biCompression sama dengan BI_RGB dan bitmap menggunakan 8 bpp atau kurang, bitmap memiliki tabel warna segera mengikuti struktur BITMAPINFOHEADER . Tabel warna terdiri dari array nilai RGBQUAD . Ukuran array diberikan oleh anggota biClrUsed . Jika biClrUsed adalah nol, array berisi jumlah maksimum warna untuk bitdepth yang diberikan; yaitu, 2^biBitCount warna.
  • Jika biCompression sama dengan BI_BITFIELDS, bitmap menggunakan tiga masker warna DWORD (merah, hijau, dan biru, masing-masing), yang menentukan tata letak byte piksel. 1 bit di setiap masker menunjukkan bit untuk warna tersebut dalam piksel.
  • Jika biCompression adalah VIDEO FOURCC, keberadaan tabel warna tersirat oleh format video. Anda tidak boleh berasumsi bahwa tabel warna ada ketika kedalaman bit adalah 8 bpp atau kurang. Namun, beberapa komponen warisan mungkin mengasumsikan bahwa tabel warna ada. Oleh karena itu, jika Anda mengalokasikan struktur BITMAPINFOHEADER , disarankan untuk mengalokasikan ruang untuk tabel warna ketika kedalaman bit adalah 8 bpp atau kurang, bahkan jika tabel warna tidak digunakan.
Ketika BITMAPINFOHEADER diikuti oleh tabel warna atau sekumpulan masker warna, Anda dapat menggunakan struktur BITMAPINFO untuk mereferensikan tabel warna masker warna. Struktur BITMAPINFO didefinisikan sebagai berikut:
typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD          bmiColors[1];
} BITMAPINFO;

Jika Anda mentransmisikan BITMAPINFOHEADER ke BITMAPINFO, anggota bmiHeader mengacu pada BITMAPINFOHEADER dan anggota bmiColors mengacu pada entri pertama dalam tabel warna, atau masker warna pertama.

Ketahuilah bahwa jika bitmap menggunakan tabel warna atau masker warna, maka ukuran seluruh struktur format ( BITMAPINFOHEADER ditambah informasi warna) tidak sama dengan sizeof(BITMAPINFOHEADER) atau sizeof(BITMAPINFO). Anda harus menghitung ukuran aktual untuk setiap instans.

Menghitung Surface Stride

Dalam bitmap yang tidak dikompresi, langkah adalah jumlah byte yang diperlukan untuk memulai dari awal satu baris piksel ke awal baris berikutnya. Format gambar mendefinisikan langkah minimum untuk gambar. Selain itu, perangkat keras grafis mungkin memerlukan langkah yang lebih besar untuk permukaan yang berisi gambar.

Untuk format RGB yang tidak dikompresi, langkah minimum selalu lebar gambar dalam byte, dibulatkan ke DWORD terdekat. Untuk menghitung langkah dan ukuran gambar, Anda bisa menggunakan makro GDI_DIBWIDTHBYTES dan/atau GDI_DIBSIZE , atau rumus berikut:

stride = ((((biWidth * biBitCount) + 31) & ~31) >> 3);
biSizeImage = abs(biHeight) * stride;

Untuk format YUV, tidak ada aturan umum untuk menghitung langkah minimum. Anda harus memahami aturan untuk format YUV tertentu. Untuk deskripsi format YUV yang paling umum, lihat Format YUV 8-Bit yang Direkomendasikan untuk Penyajian Video.

Dekode dan sumber video harus mengusulkan format di mana biWidth adalah lebar gambar dalam piksel. Jika perender video memerlukan langkah permukaan yang lebih besar dari langkah gambar default, itu memodifikasi jenis media yang diusulkan dengan mengatur nilai berikut:

Kemudian perender video mengusulkan format yang dimodifikasi dengan memanggil IPin::QueryAccept pada pin upstram. Untuk informasi selengkapnya tentang mekanisme ini, lihat Perubahan Format Dinamis.

Jika ada padding di buffer gambar, jangan pernah mendereferensikan pointer ke dalam memori yang telah dicadangkan untuk padding. Jika buffer gambar telah dialokasikan dalam memori video, padding mungkin tidak dapat dibaca memori.

Persyaratan

   
Header wingdi.h

Lihat juga

Struktur DirectShow

Struktur VIDEOINFOHEADER

Struktur VIDEOINFOHEADER2

Bekerja dengan Bingkai Video