Udostępnij za pośrednictwem


Efekt skalowania

Użyj tego efektu, aby skalować obraz w górę lub w dół. Efekt ma sześć trybów skalowania: najbliższy sąsiad, liniowy, sześcienny, liniowy, wielo próbkowy liniowy, anisotropowy i wysokiej jakości sześcienny.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1Scale.

Przykładowy obraz

W tym przykładzie pokazano efekt skalowania powiększający się 2 razy w danych wejściowych i przycinany do oryginalnego rozmiaru.

Przed
obraz przed efektem.
Po
obraz po przekształceniu.
ComPtr<ID2D1Effect> scaleEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Scale, &scaleEffect);

scaleEffect->SetInput(0, bitmap);

scaleEffect->SetValue(D2D1_SCALE_PROP_CENTER_POINT, D2D1::Vector2F(256.0f, 192.0f));
scaleEffect->SetValue(D2D1_SCALE_PROP_SCALE, D2D1::Vector2F(2.0f, 2.0f));

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

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
Skala
D2D1_SCALE_PROP_SCALE
Wielkość skalowania w kierunku X i Y jako stosunek rozmiaru wyjściowego do rozmiaru wejściowego. Ta właściwość D2D1_VECTOR_2Fdefined jako: (skala X, skala Y). Kwoty skalowania to FLOAT, bezjednostki i muszą być dodatnie lub 0.
Typ jest D2D1_VECTOR_2F.
Wartość domyślna to {1.0f, 1.0f}.
CenterPoint
D2D1_SCALE_PROP_CENTER_POINT
Punkt środkowy skalowania obrazu. Ta właściwość jest D2D1_VECTOR_2F zdefiniowana jako: (punkt X, punkt Y). Jednostki znajdują się w adresach IP.
Użyj właściwości punktu środkowego, aby skalować wokół punktu innego niż lewy górny róg.
Typ jest D2D1_VECTOR_2F.
Wartość domyślna to {0.0f, 0.0f}.
BorderMode
D2D1_SCALE_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.
Ostrość
D2D1_SCALE_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 w dół.
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.
InterpolacjaMode
D2D1_SCALE_PROP_INTERPOLATION_MODE
Tryb interpolacji używany przez efekt do skalowania obrazu. Istnieje 6 trybów skalowania, które wahają się w zakresie jakości i szybkości. Aby uzyskać więcej informacji, zobacz tryby interpolacji .
Typ to D2D1_SCALE_INTERPOLATION_MODE.
Wartość domyślna to D2D1_SCALE_INTERPOLATION_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.

`

Tryby interpolacji

Wyliczenie Opis
D2D1_SCALE_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_SCALE_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_SCALE_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_SCALE_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_SCALE_INTERPOLATION_MODE_ANISOTROPIC Używa filtrowania anisotropowego do próbkowania wzorca zgodnie z przekształconym kształtem mapy bitowej.
D2D1_SCALE_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_SCALE_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

Lokalizacja i rozmiar wyjściowej mapy bitowej zależy od określonego współczynnika skalowania i punktu środkowego.

Rozmiar wyjściowej mapy bitowej można obliczyć przy użyciu tego równania:

BitmapSizex(piksele)=Skalowaniex*Oryginalny rozmiar mapy bitowejx (DIPs)*(UserDPI/96)
BitmapSizey(Piksele)=Skalowaniey*Oryginalny rozmiar mapy bitowejy (DIPs)*(UserDPI/96)

Efekt zaokrągla ułamki pikseli do najbliższego całego piksela.

Lokalizacja mapy bitowej to (0, 0) lub wartość właściwości punktu środkowego.

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