Udostępnij za pośrednictwem


Efekt źródła mapy bitowej

Użyj efektu źródła mapy bitowej, aby wygenerować ID2D1Image z IWICBitmapSource do użycia jako dane wejściowe na wykresie efektowym. Ten efekt powoduje skalowanie i rotację procesora CPU. Można również opcjonalnie wygenerować mapę mipmap pamięci systemowej, która może być optymalizacją wydajności do aktywnego skalowania bardzo dużych obrazów w różnych ograniczonych rozdzielczościach.

Nuta

Efekt źródła mapy bitowej przyjmuje dane wejściowe jako właściwość, a nie jako dane wejściowe obrazu. Należy użyć metody SetValue, a nie metody SetInput. Właściwość WicBitmapSource służy do określania danych wejściowych obrazu.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1BitmapSource.

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
IWICBitmapSource zawierające dane obrazu do załadowania.
Typ to IWICBitmapSource.
Wartość domyślna to NULL.
Skala
D2D1_BITMAPSOURCE_PROP_SCALE
Wielkość skali w kierunku X i Y. Efekt mnoży szerokość przez wartość X i wysokość przez wartość Y. Ta właściwość jest D2D1_VECTOR_2F zdefiniowana 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}.
InterpolacjaMode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Tryb interpolacji używany do skalowania obrazu. Aby uzyskać więcej informacji, zobacz tryby interpolacji .
Jeśli tryb wyłączy mipmap, bitmapSouce będzie buforować obraz w rozdzielczości określonej przez właściwości Scale i EnableDPICorrection.
Typ to D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
Wartość domyślna to D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Jeśli ustawisz tę wartość na wartość TRUE, efekt spowoduje skalowanie obrazu wejściowego w celu przekonwertowania dpi zgłoszonego przez IWICBitmapSource do dpi kontekstu urządzenia. Efekt używa trybu interpolacji ustawionego za pomocą właściwości InterpolationMode. W przypadku ustawienia wartości FALSE efekt używa wartości DPI 96.0 dla obrazu wyjściowego.
Typ to BOOL.
Wartość domyślna to FALSE.
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
Tryb alfa danych wyjściowych. Może to być premultiplied lub proste. Aby uzyskać więcej informacji, zobacz tryby alfa.
Typ jest D2D1_BITMAPSOURCE_ALPHA_MODE.
Wartość domyślna to D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Orientacja
D2D1_BITMAPSOURCE_PROP_ORIENTATION
Operacja przerzucania i/lub rotacji, która ma być wykonywana na obrazie. Aby uzyskać więcej informacji, zobacz Orientacja.
Typ to D2D1_BITMAPSOURCE_ORIENTATION.
Wartość domyślna to D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Tryby interpolacji

Efekt interpoluje przy użyciu tego trybu podczas skalowania obrazu lub poprawia dpi. Tryby interpolacji używane przez ten efekt są obliczane przez procesor CPU, a nie procesor GPU.

Nazwa Opis
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Próbkuje najbliższy pojedynczy punkt i używa go. Nie generuje mapy mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Używa próbki czterech punktów i interpolacji liniowej. Nie generuje mapy mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Używa 16 przykładowego jądra sześciennego do interpolacji. Nie generuje mapy mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Używa interpolacji Fant WIC, tak samo jak interfejs IWICBitmapScaler. Nie generuje mapy mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Generuje łańcuch mipmap w pamięci systemowej przy użyciu interpolacji dwuliniowej. Dla każdego mipmap efekt skaluje się do najbliższej wielokrotności 0,5 przy użyciu interpolacji dwuliniowej, a następnie skaluje pozostałą ilość przy użyciu interpolacji liniowej.

Orientacja

Właściwość Orientacja może służyć do stosowania flagi orientacji EXIF osadzonej na obrazie.

Nazwa Opis
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT Domyślny. Efekt nie zmienia orientacji danych wejściowych.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Przerzuca obraz w poziomie.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Obraca obraz zgodnie z ruchem wskazówek zegara 180 stopni.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Obraca obraz zgodnie z ruchem wskazówek zegara 180 stopni i odwraca go w poziomie.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Obraca obraz zgodnie z ruchem wskazówek zegara 270 stopni i odwraca go w poziomie.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Obraca obraz zgodnie z ruchem wskazówek zegara 90 stopni.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Obraca obraz zgodnie z ruchem wskazówek zegara 90 stopni i odwraca go w poziomie.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Obraca obraz zgodnie z ruchem wskazówek zegara 270 stopni.

Ten fragment kodu pokazuje, jak przekonwertować wartości orientacji EXIF (zdefiniowane w pliku propkey.h) na wartości D2D1_BITMAPSOURCE_ORIENTATION.

#include <propkey.h>
#include <d2d1effects.h>

D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
       switch (PhotoOrientation)
       {
       case PHOTO_ORIENTATION_NORMAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       case PHOTO_ORIENTATION_FLIPHORIZONTAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE180:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
       case PHOTO_ORIENTATION_FLIPVERTICAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_TRANSPOSE: 
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE270:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
       case PHOTO_ORIENTATION_TRANSVERSE:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE90:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
       default:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       }
}

Tryby alfa

Nazwa Opis
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED W danych wyjściowych efektu użyto premultiplied alfa.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT Dane wyjściowe efektu używają prostej alfa.

Uwagi

Aby zoptymalizować wydajność w przypadku korzystania ze WIC i Direct2D, należy użyć IWICFormatConverter do konwersji na odpowiedni format pikseli oparty na scenariuszu aplikacji i natywnej precyzji obrazu.

W większości przypadków potok Direct2D aplikacji wymaga tylko 8 bitów na kanał (bpc) precyzji lub obraz zapewnia tylko 8 bpc precyzji, dlatego należy przekonwertować na GUID_WICPixelFormat32bppPBGRA. Jeśli jednak chcesz skorzystać z dodatkowej precyzji dostarczonej przez obraz (na przykład JPEG-XR lub TIFF przechowywany z większą niż 8 precyzją bpc), należy użyć formatu pikseli opartego na RGBA. Poniższa tabela zawiera więcej szczegółów.

Żądana precyzja Natywna precyzja obrazu Zalecany format pikseli
8 bitów na kanał <= 8 bitów na kanał GUID_WICPixelFormat32bppPBGRA
Jak najwięcej <= 8 bitów na kanał GUID_WICPixelFormat32bppPBGRA
Jak najwięcej > 8 bitów na kanał Kolejność kanałów RGBA, premultiplied alfa

Ponieważ wiele formatów obrazów obsługuje wiele poziomów dokładności, należy użyć IWICBitmapSource::GetPixelFormat w celu uzyskania natywnego formatu pikseli obrazu, a następnie użyć IWICPixelFormatInfo określić, ile bitów na kanał dokładności jest dostępnych dla tego formatu. Należy również pamiętać, że nie wszystkie sprzęty obsługują formaty pikseli o wysokiej precyzji. W takich przypadkach aplikacja może wymagać powrotu do urządzenia WARP w celu zapewnienia wysokiej precyzji.

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