Efek campuran
Gunakan efek blend untuk menggabungkan 2 gambar. Efek ini memiliki 26 mode campuran.
CLSID untuk efek ini CLSID_D2D1Blend.
- Contoh blending
- Properti efek
- Mode blend
- Konversi ruang warna HSL
- Bitmap output
- Kode sampel
- Persyaratan
- Topik terkait
Berikut adalah contoh gambar dari setiap mode campuran efek campuran. Daftar lengkap mode campuran dan properti mode terkait ada di bagian berikutnya
Berikut adalah contoh lain menggunakan mode pengecualian.
Sebelum gambar 1 |
---|
Sebelum gambar 2 |
Sesudahnya |
ComPtr<ID2D1Effect> blendEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Blend, &blendEffect);
blendEffect->SetInput(0, bitmap);
blendEffect->SetInput(1, bitmapTwo);
blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2D1_BLEND_MODE_EXCLUSION);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(blendEffect.Get());
m_d2dContext->EndDraw();
Nama tampilan dan enumerasi indeks | Deskripsi |
---|---|
Mode D2D1_BLEND_PROP_MODE |
Mode blend yang digunakan untuk efek. Lihat Mode blend untuk informasi selengkapnya. Jenisnya D2D1_BLEND_MODE. Nilai defaultnya adalah D2D1_BLEND_MODE_MULTIPLY. |
Tabel di sini menunjukkan semua mode campuran efek ini. Fungsi pembantu yang diperlukan untuk menghitung output efek berada di bagian berikutnya.
Warna: OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
Alpha: OA = FA * (1 - BA) + BA
Mana:
- OPRGB adalah warna output yang telah dikalikan sebelumnya
- OA adalah Output Alpha
- BRGB adalah warna tujuan yang tidak dikalikan sebelumnya
- BA adalah alfa tujuan
- FRGB adalah warna sumber yang tidak dikalikan sebelumnya
- FA adalah alfa sumber
- f(SRGB, DRGB) adalah fungsi campuran yang bervariasi per mode campuran
Beberapa mode campuran memerlukan konversi ke dan dari rona, saturasi, ruang warna luminositas (HSL) ke RGB.
Enumeration | Persamaan |
---|---|
D2D1_BLEND_MODE_DARKEN | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_MULTIPLY | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_COLOR_BURN | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_BURN | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DARKER_COLOR | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_LIGHTEN | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_SCREEN | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_COLOR_DODGE | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_DODGE | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LIGHTER_COLOR | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_OVERLAY | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_SOFT_LIGHT | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_LIGHT | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_VIVID_LIGHT | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_LIGHT | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_PIN_LIGHT | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_MIX | Rumus campuran dasar dengan f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DIFFERENCE | Rumus campuran dasar dengan f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Rumus campuran dasar dengan f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * B RGB |
D2D1_BLEND_MODE_HUE | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_SATURATION | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_COLOR | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_LUMINOSITY | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_DISSOLVE | Diberikan:
|
D2D1_BLEND_MODE_SUBTRACT | Rumus campuran dasar hanya untuk alfa. |
D2D1_BLEND_MODE_DIVISION | Rumus campuran dasar hanya untuk alfa. |
Catatan
Untuk semua mode Blend, nilai output telah diisi sebelumnya dan dijepit ke rentang [0, 1].
Komponen luminositas dihitung menggunakan bobot RGB di sini:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Ini menempatkan S dan L dalam rentang [0.0, 1.0] dan H dalam rentang [-1.0, 5.0].
Untuk mengonversi cara lain, kita menggunakan kebalikan dari perhitungan sebelumnya.
Jika S = 0 maka R = G = B L =
Jika tidak, ada enam kasus dependan hue:
Jika H lebih besar dari 0, nilainya berada di sektor merah/magenta tempat R>B>G.
Jika H lebih besar dari atau sama dengan 0 dan kurang dari 1, nilainya berada di sektor merah/kuning di mana R>G>B.
Jika H lebih besar dari atau sama dengan 1 dan kurang dari 2, nilainya berada di sektor kuning/hijau di mana G>R>B.
Jika H lebih besar dari atau sama dengan 2 dan kurang dari 3, nilainya berada di sektor hijau/sian di mana G>B>R.
Jika H lebih besar dari atau sama dengan 3 dan kurang dari 4, nilainya berada di sektor sian/biru tempat B>G>R.
Jika H lebih besar dari atau sama dengan 4, nilainya berada di sektor biru/magenta tempat B>R>G.
Karena mode blending membuat kombinasi sewenang-wenang komponen HSL dari dua warna yang berbeda, umum bagi nilai RGB yang dikonversi menjadi di luar gamut, yaitu, satu atau beberapa komponen saluran mungkin berada di luar rentang hukum [0.0, 1.0]. Warna-warna ini dibawa kembali ke gamut dengan mengurangi kejenuhan secara minimal, sambil mempertahankan warna dan luminositas:
Bitmap output untuk efek ini selalu ukuran persatuan dari dua gambar input.
Untuk contoh efek ini, unduh sampel mode efek komposit Direct2D.
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Pembaruan Windows 8 dan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows] |
Server minimum yang didukung | Pembaruan Windows 8 dan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows] |
Header | d2d1effects.h |
Pustaka | d2d1.lib, dxguid.lib |