Bagikan melalui


Efek campuran

Gunakan efek blend untuk menggabungkan 2 gambar. Efek ini memiliki 26 mode campuran.

CLSID untuk efek ini CLSID_D2D1Blend.

Contoh blending

Berikut adalah contoh gambar dari setiap mode campuran efek campuran. Daftar lengkap mode campuran dan properti mode terkait ada di bagian berikutnya

contoh cuplikan layar efek dari semua mode campuran yang tersedia.

Berikut adalah contoh lain menggunakan mode pengecualian.

Sebelum gambar 1
gambar sumber pertama sebelum efek.
Sebelum gambar 2
gambar kedua sebelum efek.
Sesudahnya
gambar setelah transformasi.
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();

Properti efek

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.

Mode blend

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. rumus matematika untuk efek gelap.
D2D1_BLEND_MODE_MULTIPLY Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek perkalian.
D2D1_BLEND_MODE_COLOR_BURN Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek pembakaran koor.
D2D1_BLEND_MODE_LINEAR_BURN Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek bakar linier.
D2D1_BLEND_MODE_DARKER_COLOR Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek warna gelap.
D2D1_BLEND_MODE_LIGHTEN Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek ringan.
D2D1_BLEND_MODE_SCREEN Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek layar.
D2D1_BLEND_MODE_COLOR_DODGE Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek dodge warna.
D2D1_BLEND_MODE_LINEAR_DODGE Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek dodge linier.
D2D1_BLEND_MODE_LIGHTER_COLOR Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek warna yang lebih terang.
D2D1_BLEND_MODE_OVERLAY Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek overlay.
D2D1_BLEND_MODE_SOFT_LIGHT Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek cahaya lembut.
D2D1_BLEND_MODE_HARD_LIGHT Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek cahaya keras.
D2D1_BLEND_MODE_VIVID_LIGHT Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek cahaya yang cerah.
D2D1_BLEND_MODE_LINEAR_LIGHT Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek cahaya linier.
D2D1_BLEND_MODE_PIN_LIGHT Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek cahaya pin.
D2D1_BLEND_MODE_HARD_MIX Rumus campuran dasar dengan f(FRGB, BRGB) = Rumus matematika untuk efek campuran keras.
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. Rumus matematika untuk efek campuran rona.
D2D1_BLEND_MODE_SATURATION Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek campuran saturasi.
D2D1_BLEND_MODE_COLOR Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek campuran warna.
D2D1_BLEND_MODE_LUMINOSITY Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek campuran luminositas.
D2D1_BLEND_MODE_DISSOLVE Diberikan:
  • Koordinat adegan XY untuk piksel saat ini
  • Generator angka acak pseudo deterministik rand (XY) berdasarkan koordinat benih XY, dengan distribusi nilai yang tidak bias dari [0, 1]

Rumus matematika untuk efek campuran terlarut.
D2D1_BLEND_MODE_SUBTRACT Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek campuran pengurangan.
D2D1_BLEND_MODE_DIVISION Rumus campuran dasar hanya untuk alfa. Rumus matematika untuk efek campuran pembagian.

Catatan

Untuk semua mode Blend, nilai output telah diisi sebelumnya dan dijepit ke rentang [0, 1].

Konversi ruang warna HSL

Komponen luminositas dihitung menggunakan bobot RGB di sini:

  • kR = 0,30
  • kG = 0,59
  • kB = 0,11

Mengonversi dari RGB ke HSL

rumus matematika yang menjelaskan transformasi dari warna rgb ke warna hsl.

Ini menempatkan S dan L dalam rentang [0.0, 1.0] dan H dalam rentang [-1.0, 5.0].

Mengonversi dari HSL ke RGB

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.

langkah equaiton matematika salah satu dari enam mengonversi warna hsl ke rgb.

Jika H lebih besar dari atau sama dengan 0 dan kurang dari 1, nilainya berada di sektor merah/kuning di mana R>G>B.

matematika equaiton langkah dua dari enam mengonversi warna hsl ke rgb.

Jika H lebih besar dari atau sama dengan 1 dan kurang dari 2, nilainya berada di sektor kuning/hijau di mana G>R>B.

matematika equaiton langkah tiga dari enam mengonversi warna hsl ke rgb.

Jika H lebih besar dari atau sama dengan 2 dan kurang dari 3, nilainya berada di sektor hijau/sian di mana G>B>R.

equaiton matematika langkah empat dari enam mengonversi warna hsl ke rgb.

Jika H lebih besar dari atau sama dengan 3 dan kurang dari 4, nilainya berada di sektor sian/biru tempat B>G>R.

matematika equaiton langkah lima dari enam mengonversi warna hsl ke rgb.

Jika H lebih besar dari atau sama dengan 4, nilainya berada di sektor biru/magenta tempat B>R>G.

equaiton matematika langkah enam dari enam mengonversi warna hsl ke rgb.

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:

rumus matematika yang menjelaskan koreksi yang diperlukan untuk instans gamut.

Bitmap output

Bitmap output untuk efek ini selalu ukuran persatuan dari dua gambar input.

Kode Sampel

Untuk contoh efek ini, unduh sampel mode efek komposit Direct2D.

Persyaratan

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

ID2D1Effect