Bagikan melalui


bitmap Device-Independent

Bitmap independen perangkat (DIB) berisi tabel warna . Tabel warna menjelaskan bagaimana nilai piksel sesuai dengan RGB nilai warna, 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 kembar tiga merah, hijau, biru (RGB) 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 strukturBITMAPINFO, yang terdiri dari strukturBITMAPINFOHEADERdiikuti oleh dua struktur RGBQUAD atau lebih. Struktur BITMAPINFOHEADER menentukan dimensi persegi panjang 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 ke 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 Tinggi anggota struktur header informasi bitmap, adalah nilai positif, itu adalah DIB bawah ke 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 (atau printer) tertentu 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 fungsiGetDeviceCaps, yang menentukan 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 menggantikan HORZSIZE.

Palet diwakili oleh array strukturRGBQUADyang menentukan komponen intensitas merah, hijau, dan biru untuk setiap warna dalam palet warna perangkat tampilan. Setiap indeks warna dalam array palet dipetakan 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 fungsiGetDeviceCaps, 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 deskripsiBITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER, dan struktur BITMAPV5HEADER.

Aplikasi dapat membuat DIB dari DDB dengan menginisialisasi struktur yang diperlukan dan memanggil fungsiGetDIBits. Untuk menentukan apakah perangkat mendukung fungsi ini, panggil fungsiGetDeviceCaps, menentukan 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 memanggilSetDIBitsToDeviceatau fungsiStretchDIBits. Untuk menentukan apakah perangkat mendukung fungsi SetDIBitsToDevice, panggil fungsiGetDeviceCaps, 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 fungsiSetDIBitsToDevice. Misalnya, aplikasi spreadsheet dapat membuka bagan yang ada dan menampilkannya di jendela dengan menggunakan fungsi SetDIBitsToDevice. Namun, untuk mengulangi bitmap di jendela, aplikasi harus menggunakan fungsibitBlt. Misalnya, aplikasi multimedia yang menggabungkan grafik animasi dengan suara akan mendapat manfaat dari memanggil fungsi BitBlt karena dijalankan lebih cepat daripada SetDIBitsToDevice.