Udostępnij za pośrednictwem


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

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

operacji macierzy affine

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

ID2D1Effect