Struktur BLENDFUNCTION (wingdi.h)

Struktur BLENDFUNCTION mengontrol perpaduan dengan menentukan fungsi blending untuk bitmap sumber dan tujuan.

Sintaks

typedef struct _BLENDFUNCTION {
  BYTE BlendOp;
  BYTE BlendFlags;
  BYTE SourceConstantAlpha;
  BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION;

Anggota

BlendOp

Operasi campuran sumber. Saat ini, satu-satunya operasi campuran sumber dan tujuan yang telah ditentukan adalah AC_SRC_OVER. Untuk detailnya, lihat bagian Keterangan berikut ini.

BlendFlags

Harus nol.

SourceConstantAlpha

Menentukan nilai transparansi alfa yang akan digunakan pada seluruh bitmap sumber. Nilai SourceConstantAlpha dikombinasikan dengan nilai alfa per piksel apa pun di bitmap sumber. Jika Anda mengatur SourceConstantAlpha ke 0, diasumsikan bahwa gambar Anda transparan. Atur nilai SourceConstantAlpha ke 255 (buram) saat Anda hanya ingin menggunakan nilai alfa per piksel.

AlphaFormat

Anggota ini mengontrol cara bitmap sumber dan tujuan ditafsirkan. AlphaFormat memiliki nilai berikut.

Nilai Makna
AC_SRC_ALPHA Bendera ini diatur ketika bitmap memiliki saluran Alpha (yaitu, alfa per piksel). Perhatikan bahwa API menggunakan alfa premultiplied, yang berarti bahwa nilai saluran merah, hijau, dan biru dalam bitmap harus dimuat sebelumnya dengan nilai saluran alfa. Misalnya, jika nilai saluran alfa adalah x, saluran merah, hijau, dan biru harus dikalikan dengan x dan dibagi dengan 0xff sebelum panggilan.

Keterangan

Ketika anggota AlphaFormat AC_SRC_ALPHA, bitmap sumber harus 32 bpp. Jika tidak, fungsi AlphaBlend akan gagal.

Ketika anggota BlendOp AC_SRC_OVER, bitmap sumber ditempatkan di atas bitmap tujuan berdasarkan nilai alfa piksel sumber.

Jika bitmap sumber tidak memiliki nilai alfa per piksel (yaitu, AC_SRC_ALPHA tidak diatur), nilai SourceConstantAlpha menentukan perpaduan bitmap sumber dan tujuan, seperti yang ditunjukkan dalam tabel berikut. Perhatikan bahwa SCA digunakan untuk SourceConstantAlpha di sini. Selain itu, SCA dibagi 255 karena memiliki nilai yang berkisar antara 0 hingga 255.

Dst.Red = Src.Red * (SCA/255.0) + Dst.Red * (1.0 - (SCA/255.0))
Dst.Green = Src.Green * (SCA/255.0) + Dst.Green * (1.0 - (SCA/255.0))
Dst.Blue = Src.Blue * (SCA/255.0) + Dst.Blue * (1.0 - (SCA/255.0))
 

Jika bitmap tujuan memiliki saluran alfa, maka campurannya adalah sebagai berikut.

Dst.Alpha = Src.Alpha * (SCA/255.0) + Dst.Alpha * (1.0 - (SCA/255.0))
 

Jika bitmap sumber tidak menggunakan SourceConstantAlpha (artinya, sama dengan 0xFF), alfa per piksel menentukan perpaduan bitmap sumber dan tujuan, seperti yang ditunjukkan dalam tabel berikut.

Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red
Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green
Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue
 

Jika bitmap tujuan memiliki saluran alfa, maka campurannya adalah sebagai berikut.

Dest.alpha = Src.Alpha + (1 - SrcAlpha) * Dst.Alpha
 

Jika sumber memiliki SourceConstantAlpha (yaitu, itu tidak 0xFF) dan alfa per piksel, sumbernya telah dikalikan sebelumnya oleh SourceConstantAlpha dan kemudian campuran didasarkan pada alfa per piksel. Tabel berikut ini memperlihatkan hal ini. Perhatikan bahwa SourceConstantAlpha dibagi 255 karena memiliki nilai yang berkisar antara 0 hingga 255.

Src.Red = Src.Red * SourceConstantAlpha / 255.0;
Src.Green = Src.Green * SourceConstantAlpha / 255.0;
Src.Blue = Src.Blue * SourceConstantAlpha / 255.0;
Src.Alpha = Src.Alpha * SourceConstantAlpha / 255.0;
Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red
Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green
Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue
Dst.Alpha = Src.Alpha + (1 - Src.Alpha) * Dst.Alpha

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Header wingdi.h (sertakan Windows.h)

Lihat juga

AlphaBlend

Struktur Bitmap

Gambaran Umum Bitmap