Bagikan melalui


Efek bayangan

Gunakan efek bayangan untuk menghasilkan bayangan dari saluran alfa gambar. Bayangan lebih buram untuk nilai alfa yang lebih tinggi dan lebih transparan untuk nilai alfa yang lebih rendah. Anda dapat mengatur jumlah kabur dan warna bayangan.

CLSID untuk efek ini CLSID_D2D1Shadow.

Contoh gambar

Contoh di sini menunjukkan output efek bayangan yang diterjemahkan ke bawah dan kanan dengan gambar sumber yang disusun di atasnya di lokasi asli. Efek bayangan hanya menghasilkan bayangan.

Sebelum
gambar sebelum efek.
Sesudah
gambar setelah transformasi.
ComPtr<ID2D1Effect> shadowEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Shadow, &shadowEffect);

shadowEffect->SetInput(0, bitmap);

// Shadow is composited on top of a white surface to show opacity.
ComPtr<ID2D1Effect> floodEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Flood, &floodEffect);

floodEffect->SetValue(D2D1_FLOOD_PROP_COLOR, D2D1::Vector4F(1.0f, 1.0f, 1.0f, 1.0f));

ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInputEffect(0, shadowEffect.Get());

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F::Translation(20, 20));

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

ComPtr<ID2D1Effect> compositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Composite, &compositeEffect);

compositeEffect->SetInputEffect(0, floodEffect.Get());
compositeEffect->SetInputEffect(1, affineTransformEffect.Get());
compositeEffect->SetInput(2, bitmap);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(compositeEffect.Get());
m_d2dContext->EndDraw();

Properti efek

Nama tampilan dan enumerasi indeks Deskripsi
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
Jumlah kabur yang akan diterapkan ke saluran alfa gambar. Anda dapat menghitung radius kabur kernel dengan mengalikan simpantan standar dengan 3. Unit penyimpangan standar dan radius kabur adalah DIP.
Properti ini sama dengan properti penyimpangan standar Gaussian Blur.
Jenisnya adalah FLOAT.
Nilai defaultnya adalah 3,0f.
Warna
D2D1_SHADOW_PROP_COLOR
Warna bayangan jatuh. Properti ini adalah D2D1_VECTOR_4F yang didefinisikan sebagai: (R, G, B, A). Anda harus menentukan warna ini dalam alfa lurus.
Jenisnya D2D1_VECTOR_4F.
Nilai defaultnya adalah {0.0f, 0.0f, 0.0f, 1.0f}.
Optimasi
D2D1_SHADOW_PROP_OPTIMIZATION
Tingkat pengoptimalan performa.
Jenisnya D2D1_SHADOW_OPTIMIZATION.
Nilai defaultnya adalah D2D1_SHADOW_OPTIMIZATION_BALANCED.

Mode pengoptimalan

Nama Deskripsi
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Menerapkan pengoptimalan internal seperti pra-penskalaan pada radii yang relatif kecil. Menggunakan pemfilteran linier.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Menggunakan ambang pengoptimalan yang sama dengan mode Kecepatan, tetapi menggunakan pemfilteran trilinear.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Hanya menggunakan pengoptimalan internal dengan radii kabur besar, di mana perkiraan cenderung tidak terlihat. Menggunakan pemfilteran trilinear.

Bitmap output

Ukuran bitmap output adalah ukuran output kabur. Jumlah pertumbuhan bitmap output relatif terhadap bitmap asli dapat dihitung menggunakan persamaan berikut:

Pertumbuhan Bitmap Output (X dan Y) = BlurStandardDeviation (piksel independen perangkat (DIP))*6*(DPI Pengguna)/96

Output meningkat sama ke segala arah, jadi misalnya jika ukuran meningkat 10 piksel di setiap arah, sudut kiri atas bitmap terletak di (-5, -5) dan kanan bawah akan berada di (105, 105) seperti yang ditunjukkan pada diagram di sini.

diagram pertumbuhan ukuran output efek bayangan.

Persyaratan

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

ID2D1Effect