Efekt przekształcenia 2D affine
Efekt transformacji 2D affine stosuje transformację przestrzenną do obrazu na podstawie macierzy 3X2 przy użyciu macierzy Direct2D transformacji i dowolnego z sześciu trybów interpolacji. Tego efektu można użyć do obracania, skalowania, niesymetryczności lub tłumaczenia obrazu. Możesz też połączyć te operacje. Transfery affiny zachowują linie równoległe i stosunek odległości między dowolnymi trzema punktami na obrazie.
Identyfikator CLSID dla tego efektu jest CLSID_D2D12DAffineTransform.
- przykładowy obraz
- właściwości Efekt
- tryby obramowania
- Tryby interpolacji
- danych bitowych wyjściowych
- wymagania dotyczące
- Tematy pokrewne
Przykładowy obraz
Przed |
---|
![]() |
Po |
![]() |
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);
affineTransformEffect->SetInput(0, bitmap);
D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f, 0.1f, 0.9f, 8.0f, 45.0f);
affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();
Ten efekt wykonuje tę operację macierzy:
Mimo że macierz wejściowa jest zdefiniowana jako macierz 3x2, ostatnia kolumna jest dopełniona wartością 0, 0 i 1 w celu utworzenia macierzy kwadratowej. Umożliwia to mnożenie macierzy, dzięki czemu przekształcenia można połączyć w jedną macierz.
Właściwości efektu
Nazwa wyświetlana i wyliczenie indeksu | Opis |
---|---|
InterpolacjaMode D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE |
Tryb interpolacji używany do skalowania obrazu. Istnieje 6 trybów skalowania, które wahają się w zakresie jakości i szybkości. Typ to D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE. Wartość domyślna to D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR. |
BorderMode D2D1_2DAFFINETRANSFORM_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. |
TransformMatrix D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX |
Macierz 3x2 do przekształcenia obrazu przy użyciu macierzy Direct2D transform. Typ to D2D1_MATRIX_3X2_F. Wartość domyślna to Matrix3x2F::Identity(). |
Ostrość D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS |
W trybie interpolacji sześciennej wysokiej jakości poziom ostrości filtru skalowania jako zmiennoprzecinkowy z zakresu od 0 do 1. Wartości są bezjednostki. Możesz użyć ostrości, aby dostosować jakość obrazu podczas skalowania obrazu. Współczynnik ostrości wpływa na kształt jądra. Im wyższy współczynnik ostrości, tym mniejsze jądro. Uwaga: Ta właściwość ma wpływ tylko na tryb interpolacji sześciennych wysokiej jakości. Typ to FLOAT. Wartość domyślna to 0,0f. |
Tryby obramowania
Nazwa | Opis |
---|---|
D2D1_BORDER_MODE_SOFT | Efekt podpełnia obraz przezroczystymi czarnymi pikselami, ponieważ interpoluje, co powoduje miękką krawędź. |
D2D1_BORDER_MODE_HARD | Efekt zaciska dane wyjściowe do rozmiaru obrazu wejściowego. |
Tryby interpolacji
Wyliczenie | Opis |
---|---|
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Używa próbki czterech punktów i interpolacji liniowej. Ten tryb używa więcej czasu przetwarzania niż tryb najbliższego sąsiada, ale generuje obraz o wyższej jakości. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Używa filtrowania anisotropowego do próbkowania wzorca zgodnie z przekształconym kształtem mapy bitowej. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
Nuta
Tryb anisotropowy generuje mapę mipmap podczas skalowania, jednak jeśli ustawisz właściwość Cached na wartość true dla efektów, które są danymi wejściowymi tego efektu, mipmapy nie będą generowane za każdym razem dla wystarczająco małych obrazów.
Mapa bitowa wyjściowa
Rozmiar mapy bitowej wyjściowej zależy od macierzy transformacji stosowanej do obrazu.
Efekt wykonuje operację przekształcania, a następnie stosuje pole ograniczenia wokół wyniku. Mapa bitowa danych wyjściowych jest rozmiarem pola ograniczenia.
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 |