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łaściwości Efekt
- tryby skalowania
- tryby obramowania
- danych bitowych wyjściowych
- wymagania dotyczące
- Tematy pokrewne
Przykładowy obraz
W tym przykładzie pokazano dane wejściowe i wyjściowe efektu macierzy convolve z jądrem 3 x 3.
Przed |
---|
![]() |
Po |
![]() |
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 |