Bagikan melalui


Efek matriks convolve

Gunakan efek matriks konvolve untuk menerapkan kernel 2D arbitrer ke gambar. Anda dapat menggunakan efek ini untuk mengaburkan, mendeteksi tepi, timbul, atau mempertajam gambar.

CLSID untuk efek ini CLSID_D2D1ConvolveMatrix.

Contoh gambar

Contoh di sini menunjukkan input dan output efek matriks convolve dengan kernel 3 x 3.

Sebelumnya
gambar sebelum efek.
Sesudahnya
gambar setelah transformasi.
ComPtr<ID2D1Effect> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);

convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);

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

Properti efek

Nama tampilan dan enumerasi indeks Deskripsi
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
Ukuran satu unit dalam kernel. Unit berada di (UNIT DIP/kernel), di mana unit kernel adalah ukuran elemen dalam kernel konvolusi. Nilai 1 (unit DIP/kernel) sesuai dengan satu piksel dalam gambar pada 96 DPI.
Jenisnya adalah FLOAT.
Nilai defaultnya adalah 1,0f.
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Mode interpolasi yang digunakan efek untuk menskalakan gambar ke panjang unit kernel yang sesuai. Ada enam mode skala yang berkisar dalam kualitas dan kecepatan.
Jenisnya D2D1_CONVOLVEMATRIX_SCALE_MODE.
Nilai defaultnya adalah D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
Lebar matriks kernel. Unit ditentukan dalam unit kernel. Jenisnya adalah UINT32.
Nilai defaultnya adalah 3.
KernelSizey
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
Tinggi matriks kernel. Unit ditentukan dalam unit kernel. Jenisnya adalah UINT32.
Nilai defaultnya adalah 3.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
Matriks kernel yang akan diterapkan ke gambar. Elemen kernel tidak dibatasi dan ditentukan sebagai float.
Kumpulan nomor KernelSizeX pertama di FLOAT[] sesuai dengan baris pertama dalam kernel. Kumpulan nomor KernelSizeX kedua sesuai dengan baris kedua, dan seterusnya hingga baris KernelSizeY .
Jenisnya adalah FLOAT[].
Nilai defaultnya adalah {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f} .
Pembavis
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
Matriks kernel diterapkan ke piksel dan kemudian hasilnya dibagi dengan nilai ini.
0 berulah sebagai nilai float epsilon.
Jenisnya adalah FLOAT.
Nilai defaultnya adalah 1,0f.
Bias
D2D1_CONVOLVEMATRIX_PROP_BIAS
Efeknya menerapkan matriks kernel, pembagi, dan kemudian bias ditambahkan ke hasilnya. Bias tidak terbatas dan tidak bersatu. Jenisnya adalah FLOAT.
Nilai defaultnya adalah 0,0f.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Menggeser kernel konvolusi dari posisi terpusat pada piksel output ke posisi yang Anda tentukan kiri/kanan dan atas/bawah. Offset didefinisikan dalam unit kernel.
Dengan beberapa offset dan ukuran kernel, sampel kernel konvolusi tidak akan mendarat di pusat gambar piksel. Nilai piksel untuk sampel kernel dihitung oleh interpolasi bilinear.
Jenisnya D2D1_VECTOR_2F.
Nilai defaultnya adalah {0.0f, 0.0f}.
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
Menentukan apakah kernel konvolusi diterapkan ke saluran alfa atau hanya saluran warna.
Jika Anda mengatur ini ke TRUE , kernel konvolusi hanya diterapkan ke saluran warna.
Jika Anda mengatur ini ke FALSE , kernel konvolusi diterapkan ke semua saluran.
Jenisnya adalah BOOL.
Nilai defaultnya adalah FALSE.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Mode yang digunakan untuk menghitung batas gambar, lembut atau keras. Lihat Mode batas untuk informasi selengkapnya.
Jenisnya D2D1_BORDER_MODE.
Nilai defaultnya adalah D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
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.
Jenisnya adalah BOOL.
Nilai defaultnya adalah FALSE.

Mode skala

Enumeration Deskripsi
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Sampel titik tunggal terdekat dan menggunakannya. Mode ini menggunakan lebih sedikit waktu pemrosesan, tetapi menghasilkan gambar kualitas terendah.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Menggunakan sampel empat titik dan interpolasi linier. Mode ini menghasilkan gambar berkualitas lebih tinggi daripada mode tetangga terdekat.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Menggunakan 16 sampel kernel kubik untuk interpolasi. Mode ini menggunakan waktu pemrosesan terbanyak, tetapi menghasilkan gambar berkualitas lebih tinggi.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Menggunakan 4 sampel linier dalam satu piksel untuk anti-aliasing tepi yang baik. Mode ini baik untuk menurunkan skala dengan jumlah kecil pada gambar dengan beberapa piksel.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Menggunakan pemfilteran anisotropic untuk mengambil sampel pola sesuai dengan bentuk bitmap yang diubah.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Menggunakan ukuran variabel kernel kubik berkualitas tinggi untuk melakukan pra-downscale gambar jika downscaling terlibat dalam matriks transformasi. Kemudian menggunakan mode interpolasi kubik untuk output akhir.

Catatan

Jika Anda tidak memilih mode, efek akan default ke D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.

Mode batas

Nama Deskripsi
D2D1_BORDER_MODE_SOFT Efek menyatukan gambar input dengan piksel hitam transparan untuk sampel di luar batas input saat menerapkan kernel konvolusi. Ini menciptakan tepi lembut untuk gambar, dan dalam prosesnya memperluas bitmap output berdasarkan ukuran kernel.
D2D1_BORDER_MODE_HARD Efek memperluas gambar input dengan transformasi batas jenis cermin untuk sampel di luar batas input. Ukuran bitmap output sama dengan ukuran bitmap input.

Bitmap output

Ukuran output efek tergantung pada ukuran kernel konvolusi, offset kernel, panjang unit kernel, dan pengaturan mode batas.

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