Bagikan melalui


Bitmap Device-Independent

Bitmap independen perangkat (DIB) berisi tabel warna. Tabel warna menjelaskan bagaimana nilai piksel sesuai dengan nilai warna RGB , yang menjelaskan warna yang dihasilkan dengan memancarkan cahaya. Dengan demikian, DIB dapat mencapai skema warna yang tepat pada perangkat apa pun. DIB berisi informasi warna dan dimensi berikut:

  • Format warna perangkat tempat gambar persegi panjang dibuat.
  • Resolusi perangkat tempat gambar persegi panjang dibuat.
  • Palet untuk perangkat tempat gambar dibuat.
  • Array bit yang memetakan merah, hijau, biru ( RGB ) tiga kali lipat ke piksel dalam gambar persegi panjang.
  • Pengidentifikasi kompresi data yang menunjukkan skema kompresi data (jika ada) yang digunakan untuk mengurangi ukuran array bit.

Informasi warna dan dimensi disimpan dalam struktur BITMAPINFO , yang terdiri dari struktur BITMAPINFOHEADER diikuti oleh dua struktur RGBQUAD atau lebih. Struktur BITMAPINFOHEADER menentukan dimensi persegi piksel, menjelaskan teknologi warna perangkat, dan mengidentifikasi skema kompresi yang digunakan untuk mengurangi ukuran bitmap. Struktur RGBQUAD mengidentifikasi warna yang muncul di persegi piksel.

Ada dua varietas DIB:

  • DIB bawah-atas, di mana asal terletak di sudut kiri bawah.
  • DIB atas ke bawah, di mana asal terletak di sudut kiri atas.

Jika tinggi DIB, seperti yang ditunjukkan oleh anggota Tinggi struktur header informasi bitmap, adalah nilai positif, itu adalah DIB bawah-atas; jika tinggi adalah nilai negatif, itu adalah DIB atas ke bawah. DIB atas ke bawah tidak dapat dikompresi.

Format warna ditentukan dalam hal jumlah bidang warna dan bit warna. Jumlah bidang warna selalu 1; jumlah bit warna adalah 1 untuk bitmap monokrom, 4 untuk bitmap VGA, dan 8, 16, 24, atau 32 untuk bitmap pada perangkat warna lainnya. Aplikasi mengambil jumlah bit warna yang digunakan tampilan tertentu (atau printer) dengan memanggil fungsi GetDeviceCaps , menentukan BITSPIXEL sebagai argumen kedua.

Resolusi perangkat tampilan ditentukan dalam piksel per meter. Aplikasi dapat mengambil resolusi horizontal untuk tampilan video, atau printer, dengan mengikuti proses tiga langkah ini.

  1. Panggil fungsi GetDeviceCaps , tentukan HORZRES sebagai argumen kedua.
  2. Panggil GetDeviceCaps untuk kedua kalinya, menentukan HORZSIZE sebagai argumen kedua.
  3. Bagi nilai pengembalian pertama dengan nilai pengembalian kedua.

Aplikasi ini dapat mengambil resolusi vertikal dengan menggunakan proses tiga langkah yang sama dengan parameter yang berbeda: VERTRES menggantikan HORZRES, dan VERTSIZE sebagai pengganti HORZSIZE.

Palet diwakili oleh array struktur RGBQUAD yang menentukan komponen intensitas merah, hijau, dan biru untuk setiap warna dalam palet warna perangkat tampilan. Setiap indeks warna dalam array palet memetakan ke piksel tertentu di wilayah persegi panjang yang terkait dengan bitmap. Ukuran array ini, dalam bit, setara dengan lebar persegi panjang, dalam piksel, dikalikan dengan tinggi persegi panjang, dalam piksel, dikalikan dengan jumlah bit warna untuk perangkat. Aplikasi dapat mengambil ukuran palet perangkat dengan memanggil fungsi GetDeviceCaps , menentukan NUMCOLORS sebagai argumen kedua.

Windows mendukung pemadatan array palet untuk 8-bpp dan 4-bpp bottom-up DIB. Array ini dapat dikompresi dengan menggunakan skema run-length encoding (RLE). Skema RLE menggunakan nilai 2 byte, byte pertama yang menentukan jumlah piksel berturut-turut yang menggunakan indeks warna dan byte kedua yang menentukan indeks. Untuk informasi selengkapnya tentang kompresi bitmap, lihat deskripsi struktur BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER, dan BITMAPV5HEADER .

Aplikasi dapat membuat DIB dari DDB dengan menginisialisasi struktur yang diperlukan dan memanggil fungsi GetDIBits . Untuk menentukan apakah perangkat mendukung fungsi ini, panggil fungsi GetDeviceCaps , tentukan RC_DI_BITMAP sebagai bendera RASTERCAPS.

Aplikasi yang perlu menyalin bitmap dapat menggunakan TransparentBlt untuk menyalin semua piksel dalam bitmap sumber ke bitmap tujuan kecuali piksel yang cocok dengan warna transparan.

Aplikasi dapat menggunakan DIB untuk mengatur piksel pada perangkat tampilan dengan memanggil fungsi SetDIBitsToDevice atau StretchDIBits . Untuk menentukan apakah perangkat mendukung fungsi SetDIBitsToDevice , panggil fungsi GetDeviceCaps , menentukan RC_DIBTODEV sebagai bendera RASTERCAPS. Tentukan RC_STRETCHDIB sebagai bendera RASTERCAPS untuk menentukan apakah perangkat mendukung StretchDIBits.

Aplikasi yang hanya perlu menampilkan DIB yang sudah ada sebelumnya dapat menggunakan fungsi SetDIBitsToDevice . Misalnya, aplikasi spreadsheet dapat membuka bagan yang ada dan menampilkannya di jendela dengan menggunakan fungsi SetDIBitsToDevice . Namun, untuk berulang kali menggambar ulang bitmap di jendela, aplikasi harus menggunakan fungsi BitBlt . Misalnya, aplikasi multimedia yang menggabungkan grafik animasi dengan suara akan mendapat manfaat dari memanggil fungsi BitBlt karena dijalankan lebih cepat daripada SetDIBitsToDevice.