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 Efekt
- Tryby interpolacji
- orientacji
- tryby Alpha
- uwagi
- wymagania dotyczące
- Tematy pokrewne
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 |