Udostępnij za pośrednictwem


Efekt macierzy convolve

Użyj efektu macierzy convolve, aby zastosować dowolne jądro 2D do obrazu. Możesz użyć tego efektu, aby rozmyć, wykryć krawędzie, tłoczenia lub wyostrzyć obraz.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1ConvolveMatrix.

Przykładowy obraz

W tym przykładzie pokazano dane wejściowe i wyjściowe efektu macierzy convolve z jądrem 3 x 3.

Przed
obraz przed efektem.
Po
obraz po przekształceniu.
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();

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
Rozmiar jednej jednostki w jądrze. Jednostki znajdują się w jednostkach (DIPs/jądro), gdzie jednostka jądra jest rozmiarem elementu w jądrze konwoju. Wartość 1 (jednostka DIP/jądra) odpowiada jednemu pikselowi na obrazie o rozdzielczości 96 DPI.
Typ to FLOAT.
Wartość domyślna to 1.0f.
Tryb skalowania
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Tryb interpolacji używany przez efekt do skalowania obrazu do odpowiedniej długości jednostki jądra. Istnieje sześć trybów skalowania, które wahają się w zakresie jakości i szybkości.
Typ to D2D1_CONVOLVEMATRIX_SCALE_MODE.
Wartość domyślna to D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
Szerokość macierzy jądra. Jednostki są określone w jednostkach jądra. Typ to UINT32.
Wartość domyślna to 3.
KernelSizeY
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
Wysokość macierzy jądra. Jednostki są określone w jednostkach jądra. Typ to UINT32.
Wartość domyślna to 3.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
Macierz jądra, która ma zostać zastosowana do obrazu. Elementy jądra nie są ograniczone i są określane jako zmiennoprzecinkowe.
Pierwszy zestaw KernelSizeX liczb w float[] odpowiada pierwszemu wierszowi w jądrze. Drugi zestaw liczb KernelSizeX odpowiada drugiemu wierszowi, a tak dalej do JądraSizeY wierszy.
Typ to FLOAT[].
Wartość domyślna to {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}.
Dzielnik
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
Macierz jądra jest stosowana do piksela, a następnie wynik jest podzielony przez tę wartość.
0 zachowuje się jako wartość float epsilon.
Typ to FLOAT.
Wartość domyślna to 1.0f.
Stronniczość
D2D1_CONVOLVEMATRIX_PROP_BIAS
Efekt stosuje macierz jądra, dzielnika, a następnie stronniczy jest dodawany do wyniku. Stronniczność jest niezwiązana i nieskondycyjna. Typ to FLOAT.
Wartość domyślna to 0,0f.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Przesuwa jądro splotu z pozycji wyśrodkowanej na piksel wyjściowy do pozycji określonej w lewo/w prawo i w górę/w dół. Przesunięcie jest definiowane w jednostkach jądra.
W przypadku niektórych przesunięć i rozmiarów jądra próbki jądra konwolucji nie będą lądować w centrum obrazu pikseli. Wartości pikseli dla próbki jądra są obliczane przez interpolację dwuliniową.
Typ jest D2D1_VECTOR_2F.
Wartość domyślna to {0.0f, 0.0f}.
Zachowajfa
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
Określa, czy jądro konwolucji jest stosowane do kanału alfa, czy tylko kanały kolorów.
Jeśli ustawisz to na wartość TRUE jądro konwoju zostanie zastosowane tylko do kanałów kolorów.
Jeśli ustawisz tę opcję na wartość FALSE do wszystkich kanałów zostanie zastosowane jądro splotu.
Typ to BOOL.
Wartość domyślna to FALSE.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Tryb używany do obliczania obramowania obrazu, miękkiego lub twardego. Aby uzyskać więcej informacji, zobacz Tryby obramowania.
Typ to D2D1_BORDER_MODE.
Wartość domyślna to D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
Czy efekt zaciska wartości kolorów z zakresu od 0 do 1 przed przekazaniem wartości do następnego efektu na wykresie. Efekt zaciska wartości przed premultiplies alfa .
Jeśli ustawisz wartość TRUE, efekt będzie zaciskać wartości. Jeśli ustawisz wartość FALSE, efekt nie zacisnie wartości kolorów, ale inne efekty, a powierzchnia wyjściowa może zacisać wartości, jeśli nie są wystarczająco precyzyjne.
Typ to BOOL.
Wartość domyślna to FALSE.

Tryby skalowania

Wyliczenie Opis
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Próbkuje najbliższy pojedynczy punkt i używa go. Ten tryb używa mniej czasu przetwarzania, ale generuje obraz o najniższej jakości.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Używa próbki czterech punktów i interpolacji liniowej. Ten tryb generuje obraz o wyższej jakości niż tryb najbliższego sąsiada.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Używa 16 przykładowego jądra sześciennego do interpolacji. Ten tryb używa najbardziej czasu przetwarzania, ale generuje obraz o wyższej jakości.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Używa 4 próbek liniowych w jednym pikselu do dobrego anty aliasowania krawędzi. Ten tryb jest dobry do skalowania w dół o małe ilości na obrazach z kilkoma pikselami.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Używa filtrowania anisotropowego do próbkowania wzorca zgodnie z przekształconym kształtem mapy bitowej.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Używa jądra sześciennego wysokiej jakości o zmiennej wysokiej jakości, aby wykonać wstępne skalowanie obrazu, jeśli skalowanie w dół jest zaangażowane w macierz transformacji. Następnie używa trybu interpolacji sześciennych dla końcowych danych wyjściowych.

Nuta

Jeśli nie wybierzesz trybu, efekt zostanie domyślnie D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.

Tryby obramowania

Nazwa Opis
D2D1_BORDER_MODE_SOFT Efekt udostępnia obraz wejściowy z przezroczystymi czarnymi pikselami dla próbek poza granicami wejściowymi, gdy stosuje jądro konwolucji. Spowoduje to utworzenie miękkiej krawędzi obrazu, a w procesie rozszerza wyjściową mapę bitową o rozmiar jądra.
D2D1_BORDER_MODE_HARD Efekt rozszerza obraz wejściowy za pomocą przekształcenia obramowania typu dublowanego dla próbek poza granicami wejściowymi. Rozmiar wyjściowej mapy bitowej jest równy rozmiarowi wejściowej mapy bitowej.

Mapa bitowa wyjściowa

Rozmiar danych wyjściowych efektu zależy od rozmiaru jądra konwolucji, przesunięcia jądra, długości jednostki jądra i ustawienia trybu obramowania.

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Minimalny obsługiwany serwer Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Nagłówek d2d1effects.h
Biblioteka d2d1.lib, dxguid.lib

ID2D1Effect