Udostępnij za pośrednictwem


Omówienie formatu zdjęć HD

Ten temat zawiera informacje na temat natywnego (wbudowanego) koderaka zdjęć HD dostępnego za pośrednictwem składnika Windows Imaging (WIC).

Ważny

Format HD Photo jest wstępnie standardową implementacją formatu JPEG XR, a obsługa technologii HD Photo jest implementowana przez koder WIC JPEG XR. Aby uzyskać więcej informacji, zobacz przegląd kodeka JPEG XR.

Tożsamość kodeka

Poniższa tabela zawiera informacje dotyczące identyfikacji koderów.

Składnik Opis
Nazwy formalne Zdjęcie HD, Windows Media Photo
Rozszerzenia nazw plików wdp
Typ MIME image/vnd.ms-photo
Podpisy plików Pierwsze cztery bajty: 0x4949bc00 (wersja 0; wersja wstępna), 0x4949bc01 (wersja 1.0)

W poniższej tabeli wymieniono identyfikatory GUID używane do identyfikowania natywnych składników koderów zdjęć HD.

Składnik Przyjazna nazwa GUID (Globalny Unikalny Identyfikator)
Format kontenera GUID_ContainerFormatWmp 57a37caa-367a-4540-916bf183c5093a4b
Dekoder CLSID_WICWmpDecoder a26cec36-234c-4950-ae16e34aace71d0d
Koder CLSID_WICWmpEncoder ac4ce3cb-e1c1-44cd-82155a1665509ec2

Kodowanie

Interfejs API kodowania WIC jest zaprojektowany, aby był niezależny od konkretnego kodeka, a kodowanie obrazów dla kodeków wspierających WIC jest zasadniczo takie samo. Aby uzyskać więcej informacji na temat kodowania obrazów przy użyciu interfejsu API WIC, zobacz Przegląd Kodowania.

Opcje kodera

Koderki z obsługą funkcji WIC różnią się na poziomie opcji kodowania. Opcje kodera odzwierciedlają możliwości kodera obrazu, a każdy koder natywny obsługuje zestaw tych opcji kodera. Opcje kodera mogą być podstawowymi opcjami obsługiwanymi przez WIC, dostępnymi dla wszystkich kodów z obsługą WIC (choć niekoniecznie obsługiwanych), lub opcjami specyficznymi dla kodera, zaprojektowanymi przez koder formatu obrazu. Aby zarządzać tymi opcjami kodowania podczas procesu kodowania, WIC używa interfejsu IPropertyBag2 . Aby uzyskać więcej informacji na temat korzystania z interfejsu IPropertyBag2 do kodowania WIC, zobacz Omówienie kodowania.

Koder fotograficzny HD używa zarówno podstawowych opcji WIC, jak i udostępnia kilka opcji kodowania specyficznych dla usługi HD Photo. W poniższej tabeli wymieniono opcje kodera obsługiwane przez natywny koder hd photo codec.

Podstawowe opcje kodera WIC

Nazwa właściwości VARTYPE Zakres wartości Wartość domyślna
JakośćObrazu VT_R4 0 - 1.0 0.9
bez strat VT_BOOL prawda, fałsz FAŁSZ
BitmapTransform VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

Opcje kodera specyficzne dla zdjęć HD

Nazwa właściwości VARTYPE Zakres wartości Wartość domyślna
UżyjOpcjiKodeków VT_BOOL PRAWDA, FAŁSZ FAŁSZ
Jakości VT_UI1 1 - 255 10
nakładające się VT_UI1 0 - 2 1
Podpróbkowanie VT_UI1 0 - 3 3, jeśli wartość ImageQuality > 0,8; w przeciwnym razie 1;
HorizontalTileSlices VT_UI2 0 - 4095 (szerokość obrazu – 1) >> 8
Pionowe Kafelki VT_UI2 0 - 4095 (wysokość obrazu – 1) >> 8
FrequencyOrder VT_BOOL PRAWDA, FAŁSZ prawda
InterleavedAlpha VT_BOOL prawda, fałsz FALSE
AlphaQuality VT_UI1 1 - 255 1
TranskodowanieSkładnikówSprężonych VT_BOOL PRAWDA, FAŁSZ prawda
ImageDataDiscard (DyskardowanieDanychObrazu) VT_UI1 0 - 3 0
AlphaDataDiscard VT_UI1 0 - 4 Nieużytne.
IgnoreOverlap VT_BOOL PRAWDA, FAŁSZ FAŁSZ

Jeśli opcja enkodera znajduje się na liście opcji IPropertyBag2, której koder nie obsługuje, to jest ignorowana.

Opcja ImageQuality

Określa żądaną wierność obrazu. Wartość 0.0 wskazuje najniższą możliwą wierność, a wartość 1.0 określa najwyższą wierność. W przypadku formatu obrazu HD Photo wartość 1.0 powoduje matematycznie bezstratną kompresję.

Wartość domyślna to 0,9.

Opcja CompressionQuality

Określa żądaną jakość kompresji. 0.0 wskazuje dostępny wydajny schemat kompresji. Zazwyczaj ten schemat generuje szybsze kodowanie, ale większe dane wyjściowe. Wartość 1.0 określa najbardziej wydajny dostępny schemat kompresji, który zazwyczaj generuje dłuższy kod, ale mniejsze dane wyjściowe.

Format HD Photo nie obsługuje tej opcji enkodera. Ta wartość jest ignorowana, jeśli istnieje na liście parametrów IPropertyBag2.

Opcja bezstratna

Określa, czy używać trybu kompresji strat. W przypadku formatu obrazu HD Photo ta wartość zastępuje wartość opcji ImageQuality.

Wartość domyślna to FALSE.

Opcja BitmapTransform

Określa sposób przekształcania obrazu podczas dekodowania obrazu. Należy ustawić tę opcję na jedną z WICBitmapTransformOptions wartości wyliczenia.

Wartość domyślna to WICBitmapTransformOptions::WICBitmapTransformTransformRotate0.

Opcja UseCodecOptions

Jeśli wartość jest VARIANT_TRUE Quality, Overlapi Subsampling zamiast wartości opcji.

Wartość domyślna to FALSE.

Opcja jakości

Określa jakość kompresji obrazu. Wartość 1 wskazuje tryb bezstratny. Zwiększenie wartości powoduje zwiększenie współczynników kompresji i niższą jakość obrazu.

Wartość domyślna to 10.

Opcja nakładania się

Określa poziom nakładających się przetwarzania.

W poniższej tabeli wymieniono dostępne nakładające się poziomy przetwarzania.

Wartość Opis
0 Przetwarzanie nakładające się nie jest włączone.
1 Włączono jeden poziom nakładającego się przetwarzania, modyfikując zakodowane wartości blokowe 4x4 na podstawie wartości sąsiednich bloków.
2 Włączono dwa poziomy nakładających się przetwarzania. Oprócz przetwarzania pierwszego poziomu zakodowane wartości bloków makr 16x16 są modyfikowane na podstawie wartości sąsiednich bloków makr.

Wartość domyślna to 1.

Opcja subsamplingu

Określa dodatkową kompresję w przestrzeni barw. W ten sposób można zachować szczegóły lumincji kosztem szczegółów kolorów . Ta opcja dotyczy tylko obrazów RGB.

W poniższej tabeli wymieniono dostępne opcje podpróbkowania.

Wartość Opis
3 Kodowanie 4:4:4 zachowuje pełną rozdzielczość chroma.
2 Kodowanie 4:2:2 zmniejsza rozdzielczość barwy do połowy rozdzielczości luminancji.
1 Kodowanie 4:2:0 zmniejsza rozdzielczość barwy do jednej czwartej rozdzielczości jasności.
0 Kodowanie 4:0:0 odrzuca całą zawartość chroma i zachowuje tylko lumincję. Ponieważ koder używa nieco zmodyfikowanej definicji luminance w celu zwiększenia wydajności, zalecamy przekonwertowanie obrazu RGB na monochromatyczny przed kodowaniem, a nie użycie tego trybu próbkowania chroma.

Wartość domyślna to 3, jeśli ImageQuality> 0,8; w przeciwnym razie 1.

Opcje HorizontalTileSlices, VerticalTileSlices

Określ poziome i pionowe mozaikowanie obrazu przed wykonaniem kodowania kompresyjnego dla uzyskania optymalnej wydajności dekodowania regionu. Dzieląc obraz na prostokątne kafelki podczas kodowania, można dekodować regiony obrazu bez przetwarzania całego skompresowanego strumienia danych. Wartość domyślna 0 określa brak podziałów, więc cały obraz jest traktowany jako pojedynczy kafelek. Wartość 1 dla każdego parametru tworzy jeden poziomy i pojedynczy podział pionowy, co skutecznie dzieli obraz na cztery kafelki o równym rozmiarze. Maksymalna wartość 4095 dla każdego parametru dzieli obraz na 4096 wierszy kafelków z 4096 kafelkami na wiersz. Innymi słowy, wartości parametrów są równe liczbie kafelków poziomych i pionowych (odpowiednio) minus 1. Kafelek nigdy nie może być mniejszy niż 16 pikseli szerokości lub wysokości, więc koder HD Photo może dostosować ten parametr, aby zachować wymagany minimalny rozmiar kafelka. Ponieważ istnieje obciążenie związane z przechowywaniem i przetwarzaniem każdego kafelka, należy starannie dobrać te wartości, aby dopasować się do danego scenariusza.

HorizontalTileSlices: wartość domyślna to (Szerokość obrazu – 1) >> 8.

VerticalTileSlices: wartość domyślna to (Wysokość obrazu – 1) >> 8.

Opcja FrequencyOrder

Określa, że obraz musi być zakodowany w kolejności częstotliwości. Dane o najniższej częstotliwości są wyświetlane jako pierwsze w pliku, a zawartość obrazu jest pogrupowana według jego częstotliwości, a nie orientacji przestrzennej. Organizowanie pliku według kolejności częstotliwości zapewnia najlepszą wydajność dla dekodowania opartego na częstotliwości i dlatego zalecamy. Implementacje urządzeń koderów HD Photo mogą organizować plik w przestrzeni przestrzennej, aby zmniejszyć ilość pamięci wymaganej podczas kodowania.

Wartość domyślna to true i zalecamy, aby aplikacje i urządzenia zawsze używały kolejności częstotliwości, chyba że masz powody specyficzne dla wydajności lub aplikacji, aby używać kolejności przestrzennej.

Opcja InterleavedAlpha

Ustawienie tej opcji na true nakazuje koderowi kodujące kodowanie informacji o kanale alfa jako dodatkowego przeplatanego kanału bez korelacji z kanałami zawartości obrazu. Ten tryb jest przydatny, gdy trzeba dekodować alfa jednocześnie z obrazem w scenariuszu przesyłania strumieniowego.

Ustawienie tego parametru na wartość FALSE powoduje utworzenie planarnego kanału alfa zakodowanego jako oddzielny obraz z własną opcjonalną wartością jakości. Za pomocą kanału alfa planar można dekodować dane obrazu i kanał alfa niezależnie. Przeplatane kanały alfa są obsługiwane tylko w przypadku niektórych formatów pikseli RGB. Kanał alfa planar można skojarzyć z dowolnym formatem obrazu, który definiuje kanał alfa.

Wartość domyślna to FALSE.

Opcja AlfaQuality

Określa jakość kompresji obrazu kanału alfa planar. Wartość 1 ustawia tryb bezstratny. Zwiększenie wartości powoduje zwiększenie współczynników kompresji i niższą jakość obrazu.

Wartość domyślna to 1.

Opcja CompressedDomainTranscode

Za pomocą usługi HD Photo można wykonać wiele operacji przekształcania plików bez dekodowania skompresowanych danych i ponownego kodowania ich do pliku docelowego. Operacje na skompresowanej domenie są bardzo wydajne i unikają wszelkiej dodatkowej utraty jakości, która jest typowa podczas dekodowania i ponownego kodowania obrazu skompresowanego stratnego.

Obsługiwane są następujące skompresowane operacje domeny:

  • Przytnij obszar obrazu.
  • Wykonaj przekształcenie obrotu/odwracania.
  • Odrzucanie danych częstotliwości (dzięki czemu można utworzyć mniejszy plik obrazu).
  • Przearanżuj obraz pomiędzy porządkiem przestrzennym a częstotliwościowym.

Koder HD Photo wykonuje skompresowaną operację transkodowania domeny podczas kodowania obrazu HD Photo przy użyciu dekodera HD Photo jako źródła obrazu. W zależności od wybranych opcji kodowania kodek używa operacji w skompresowanej domenie, jeśli to możliwe. Jeśli aplikacja zdecyduje się jawnie hamować wszystkie operacje transkodowania w skompresowanej domenie, należy ustawić opcję UseCodecOptions na TRUE i opcję CompressedDomainTranscode na FALSE.

Gdy koder wykonuje skompresowaną operację domeny, dozwolone są tylko niektóre ustawienia parametru kodera i właściwości.

  • Podstawowe opcje kodera ImageQuality, CompressionQuality i Lossless są ignorowane.
  • Opcje kodowania specyficzne dla zdjęć HD Jakość, Nakładanie, Przeplatana alpha i Jakość alpha są ignorowane.
  • Jeśli są obecne, opcje HorizontalTileSlices i VerticalTileSlices muszą być ustawione na zero. Nie można zmienić rozmiaru kafelka obrazu w ramach skompresowanego transkodowania domeny.
  • Organizację obrazu można zmienić między częstotliwością a kolejnością przestrzenną, określając odpowiednią wartość opcji FrequencyOrdering.
  • Operacja obrotu kardynalnego i/lub przerzucania poziomego/pionowego może być wykonana na podstawie wartości określonej w opcji kodera BitmapTransform.
  • Obraz można przycinać, określając żądany region przy użyciu parametru WICRect metody kodera WriteSource.
  • Dane obrazu i/lub Alfa można odrzucić, określając odpowiednie wartości w opcjach ImageDataDiscard i/lub AlphaDataDiscard, zmniejszając rozmiar zakodowanego pliku i skutecznie obniżając rozdzielczość nowego obrazu.

Wartość domyślna to true i zalecamy, aby aplikacje i urządzenia zawsze używały kolejności częstotliwości, chyba że masz określoną wydajność lub przyczynę użycia kolejności przestrzennej.

Opcja ImageDataDiscard

Ten parametr jest prawidłowy tylko wtedy, gdy CompressedDomainTranscode opcja jest TRUE; w przeciwnym razie jest ignorowany. ImageDataDiscard określa ilość danych obrazu do odrzucenia podczas transkodowania skompresowanej domeny. Jeśli obraz zawiera przeplatany kanał alfa, to odrzucenie danych dotyczy również kanału alfa, z wyjątkami opisanymi w dalszej części tej sekcji.

Dozwolone są następujące wartości.

Wartość Opis
0 Żadne dane częstotliwości obrazów nie są odrzucane.
1 FlexBity są odrzucane, co prowadzi do dowolnej redukcji jakości transkodowanego obrazu bez zmieniania jego efektywnej rozdzielczości. Dokładna redukcja rozmiaru pliku lub określona redukcja jakości zależy od wielu czynników i nie można ich określić ani przewidzieć. Ta wartość powoduje wyświetlenie błędu, jeśli określisz go dla przeplatanego kanału alfa.
2 Pasmo częstotliwości HighPass jest odrzucane (które obejmuje również FlexBits), skutecznie zmniejszając rozdzielczość transkodowanego obrazu o współczynnik 4 w obu wymiarach. Rzeczywiste wymiary transkodowanego obrazu pozostają takie same, ale traci wszystkie szczegóły w każdym bloku 4x4 pikseli. W związku z tym należy odpowiednio próbkować transkodowany obraz za każdym razem, gdy go zdekodujesz.
3 Oba przedziały danych o częstotliwości HighPass i LowPass są odrzucane (w tym również FlexBits), co skutecznie zmniejsza rozdzielczość transkodowanego obrazu o współczynnik 16 w obu wymiarach. Rzeczywiste wymiary transkodowanego obrazu pozostają takie same, ale traci wszystkie szczegóły w każdym makrobloku 16x16 pikseli. W związku z tym należy odpowiednio próbkować transkodowany obraz za każdym razem, gdy go zdekodujesz.

Wartość domyślna to 0.

Opcja AlphaDataDiscard

Ta opcja jest prawidłowa tylko wtedy, gdy właściwość CompressedDomainTranscode jest TRUE, a obraz zawiera planarny lub przeplatany kanał alfa; w przeciwnym razie jest ignorowana. Określa ilość danych częstotliwości alfa do odrzucenia podczas transkodowania skompresowanej domeny. Następujące wartości są dozwolone dla planarnego kanału alfa.

Wartość Opis
0 Żadne dane częstotliwości obrazów nie są odrzucane.
1 FlexBits są odrzucane, powodując arbitralną redukcję jakości planarnego kanału alfa dla transkodowanego obrazu bez zmiany efektywnej rozdzielczości. Dokładna redukcja rozmiaru pliku lub określona redukcja jakości zależy od wielu czynników i nie można ich określić ani przewidzieć.
2 Pasmo danych częstotliwości HighPass jest odrzucane (wraz z FlexBits), co skutecznie zmniejsza rozdzielczość transkodowanego kanału alfa obrazu do jednej czwartej w obu wymiarach. Rzeczywiste wymiary transkodowanego obrazu pozostają takie same, ale obraz traci wszystkie szczegóły kanału alfa planarnego w każdym bloku 4x4 pikseli. W związku z tym transkodowany obraz powinien być odpowiednio próbkowany za każdym razem, gdy jest dekodowany. Zazwyczaj tę wartość należy ustawić tylko wtedy, gdy ustawisz właściwość ImageDataDiscard na tę samą wartość.
3 Oba pasma częstotliwości HighPass i LowPass są odrzucane (w tym również FlexBits), co skutecznie zmniejsza rozdzielczość transkodowanego obrazu o czynnik 16 w obu wymiarach. Rzeczywiste wymiary transkodowanego obrazu pozostają takie same, ale obraz traci wszystkie szczegóły w każdym makrze 16x16 pikseli. W związku z tym transkodowany obraz powinien być odpowiednio zmniejszany pod względem rozdzielczości za każdym razem, gdy jest dekodowany. Zazwyczaj tę wartość należy ustawić tylko wtedy, gdy ustawisz właściwość ImageDataDiscard na tę samą wartość.
4 Kanał Alpha jest całkowicie odrzucany. Format pikseli transkodowanego obrazu jest zmieniany w celu odzwierciedlenia usunięcia kanału alfa.

W przypadku obrazów zawierających przeplatane kanały alfa, chyba że ta właściwość jest ustawiona na 4, kanał alfa jest przetwarzany tak samo jak dane obrazu, zgodnie z wartością właściwości ImageDataDiscard. Jeśli ta właściwość ma wartość 4, przeplatany kanał alfa zostanie całkowicie odrzucony, a format pikseli transkodowanego obrazu zostanie odpowiednio zmieniony.

Brak wartości domyślnej.

Opcja IgnoreOverlap

Ta opcja jest prawidłowa tylko wtedy, gdy właściwość CompressedDomainTranscode jest TRUE, a transkodowanie podregionu dokładnie jednej lub większej liczby płytek jest wymagane. Domyślną operacją transkodowania regionu (lub dekodowania) jest rozszerzenie żądanego regionu w celu uwzględnienia otaczających pikseli wymaganych do nakładania się dekodowania krawędzi regionu. Gdy ten parametr ma wartość PRAWDA, otaczające piksele są ignorowane i wyodrębniane są tylko wybrane kafelki. Ponownie wymaga to, aby żądany region był dokładnie zgodny ze współrzędnymi co najmniej jednego kafelka. Jeśli obraz źródłowy nie jest kafelkowany lub jeśli żądany region określa jakiekolwiek częściowe kafelkowanie, ten parametr jest ignorowany.

Wartość domyślna to FALSE.

Dekodowanie

Interfejs API dekodowania WIC został zaprojektowany tak, aby był niezależny od kodera, a dekodowanie obrazów dla koderów z obsługą funkcji WIC jest zasadniczo takie samo. Aby uzyskać więcej informacji na temat dekodowania obrazów, zobacz Przegląd dekodowania. Aby uzyskać więcej informacji na temat używania zdekodowanych danych obrazu, zobacz Bitmap Sources Overview (Omówienie źródeł map bitowych).

Obsługa protokołu IWICBitmapSourceTransform

Oprócz interfejsów wymaganych do kodowania WIC, natywny dekoder HD Photo obsługuje również IWICBitmapSourceTransform. Interfejs IWICBitmapSourceTransform udostępnia zaawansowaną opcję dekodowania strumienia bitowego obrazu. Zamiast zwracać pełny obraz przy użyciu interfejsu IWICBitmapFrameDecode, IWICBitmapSourceTransform interfejs umożliwia następujące opcje dekodera.

  • Zdekoduj prostokątny podregion obrazu.
  • Dekoduj do niższej rozdzielczości
  • Dekoduj do innego formatu pikseli
  • Wykonaj przekształcenie (obrót/przerzut) podczas dekodowania

Natywny kodek HD Photo zapewnia następujący poziom obsługi interfejsu IWICBitmapSourceTransform.

CzyObsługujeTransformację

Implementacja natywna obsługuje wszystkie przekształcenia WICBitmapTransformOptions.

PobierzNajbliższyRozmiar

W przypadku żądań, które są mniejsze niż 1/2 wymiaru obrazu źródłowego w obu wymiarach, usługa HD Photo zwraca następny największy rozmiar obrazu całkowitego, który jest równomiernie podzielny przez współczynnik dwóch. W przypadku wszystkich innych żądanych rozmiarów zdjęcie HD zwraca oryginalne wymiary obrazu.

ZnajdźNajbliższyFormatPikseli

Zdjęcie HD zwraca format pikseli zakodowanego obrazu.

CopyPixels

Zdjęcie HD akceptuje dowolny żądany region określony przez parametr WICRect i zwraca tę część obrazu.

Parametry uiWidth i uiHeight muszą określać wymiary zwracane przez funkcję GetClosestSize. Wszystkie inne wartości zwracają błąd.

Parametr pguidDstFormat musi określać format pikseli zwrócony przez funkcję GetClosestPixelFormat. Każda inna wartość zwraca błąd.

Hd Photo akceptuje dowolną dozwoloną wartość parametru dstTransform. Należy pamiętać, że wartości dozwolone przez usługę WIC dla tego parametru różnią się od wartości używanych przez usługę HD Photo dla tagu metadanych przekształcenia.