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) |