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łaściwości Efekt
- tryby obramowania
- Tryby interpolacji
- danych bitowych wyjściowych
- wymagania dotyczące
- Tematy pokrewne
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 |
---|
![]() |
Po |
![]() |
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 |