Efek transfer diskrit
Gunakan efek transfer diskrit untuk memetakan intensitas warna gambar menggunakan fungsi transfer langkah yang dibuat dari daftar nilai yang Anda berikan.
CLSID untuk efek ini CLSID_D2D1DiscreteTransfer.
Gambar di sini menunjukkan input dan output efek transfer diskrit.
Sebelum |
---|
![]() |
Sesudah |
![]() |
ComPtr<ID2D1Effect> discreteTransferEffect;
m_d2dContext->CreateEffect(CLSID_D2D1DiscreteTransfer, &discreteTransferEffect);
discreteTransferEffect->SetInput(0, bitmap);
float table[3] = {0.0f, 0.5f, 1.0f};
discreteTransferEffect->SetValue(D2D1_DISCRETETRANSFER_PROP_RED_TABLE, table);
discreteTransferEffect->SetValue(D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE, table);
discreteTransferEffect->SetValue(D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE, table);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(discreteTransferEffect.Get());
m_d2dContext->EndDraw();
Fungsi transfer didasarkan pada daftar input: V=(V0,V1,V2,V3,V? , VN) di mana N adalah jumlah elemen - 1.
Intensitas piksel input direpresentasikan sebagai C. Intensitas piksel output, C dihitung dengan persamaan:
Untuk nilai C, pilih nilai k, sehingga:
Output C dapat dihitung menggunakan persamaan: C' = V?
Efek ini bekerja pada gambar alfa lurus dan pramulatif. Efek menghasilkan bitmap alfa yang telah dikutip sebelumnya.
Berikut adalah grafik fungsi transfer diskrit terlihat jika input [0.25, 0.5, 0.75, 1.0]
.
Catatan
Nilai semua saluran properti transfer diskrit tidak bersatu dan memiliki minimal 0,0 dan maksimum 1,0.
Nama tampilan dan enumerasi indeks | Ketik dan nilai default | Deskripsi |
---|---|---|
RedTable D2D1_DISCRETETRANSFER_PROP_RED_TABLE |
FLOAT[] {0.0f, 1.0f} |
Daftar nilai yang digunakan untuk menentukan fungsi transfer untuk saluran Merah. |
RedDisable D2D1_DISCRETETRANSFER_PROP_RED_DISABLE |
BOOL PALSU |
Jika Anda mengatur ini ke TRUE, efek tidak menerapkan fungsi transfer ke saluran Merah. Jika Anda mengatur ini ke FALSE, efek menerapkan fungsi RedDiscreteTransfer ke saluran Merah. |
GreenTable D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE |
FLOAT[] {0.0f, 1.0f} |
Daftar nilai yang menentukan fungsi transfer untuk saluran Hijau. |
GreenDisable D2D1_DISCRETETRANSFER_PROP_GREEN_DISABLE |
BOOL PALSU |
Jika Anda mengatur ini ke TRUE, efek tidak menerapkan fungsi transfer ke saluran Hijau. Jika Anda mengatur ini ke FALSE, efek menerapkan fungsi GreenDiscreteTransfer ke saluran Hijau. |
BlueTable D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE |
FLOAT[] {0.0f, 1.0f} |
Daftar nilai yang menentukan fungsi transfer untuk saluran Biru. |
BlueDisable D2D1_DISCRETETRANSFER_PROP_BLUE_DISABLE |
BOOL PALSU |
Jika Anda mengatur ini ke TRUE, efek tidak menerapkan fungsi transfer ke saluran Biru. Jika Anda mengatur ini ke FALSE, efek menerapkan fungsi BlueDiscreteTransfer ke saluran Biru. |
AlphaTable D2D1_DISCRETETRANSFER_PROP_ALPHA_TABLE |
FLOAT[] {0.0f, 1.0f} |
Daftar nilai yang menentukan fungsi transfer untuk saluran Alpha. |
AlphaDisable D2D1_DISCRETETRANSFER_PROP_ALPHA_DISABLE |
BOOL PALSU |
Jika Anda mengatur ini ke TRUE, efek tidak menerapkan fungsi transfer ke saluran Alpha. Jika Anda mengatur ini ke FALSE, efek menerapkan fungsi AlphaDiscreteTransfer ke saluran Alpha. |
ClampOutput D2D1_DISCRETETRANSFER_PROP_CLAMP_OUTPUT |
BOOL PALSU |
Apakah efek menjepit nilai warna ke antara 0 dan 1 sebelum efek meneruskan nilai ke efek berikutnya dalam grafik. Efek menjepit nilai sebelum premultiplies alfa. Jika Anda mengatur ini ke TRUE, efek akan menjepit nilai. Jika Anda mengatur ini ke FALSE, efek tidak akan menjepit nilai warna, tetapi efek lain dan permukaan output dapat menjepit nilai jika tidak memiliki presisi yang cukup tinggi. |
Syarat | 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 |
Perpustakaan | d2d1.lib, dxguid.lib |