Übersicht über das HD-Fotoformat
Dieser Artikel enthält Informationen zum nativen (integrierten) HD Photo-Codec, der über die Windows-Bilderstellungskomponente (Windows Imaging Component, WIC) verfügbar ist.
Wichtig
Das HD Photo-Format ist eine Vorstandardimplementierung des JPEG XR-Formats, und die Unterstützung für HD Photo wird vom JPEG XR WIC-Codec implementiert. Weitere Informationen finden Sie unter Übersicht über den JPEG XR-Codec.
Codecidentität
Die folgende Tabelle enthält Informationen für die Codecidentifikation.
Komponente | Beschreibung |
---|---|
Formale(r) Name(n) | HD Photo, Windows Media-Foto |
Dateinamenerweiterung(en) | wdp |
MIME-Typ | image/vnd.ms-photo |
Dateisignatur(en) | Erste vier Bytes: 0×4949bc00 (Version 0; Vorabversion), 0×4949bc01 (Version 1.0) |
In der folgenden Tabelle sind die GUIDs aufgeführt, die zum Identifizieren der nativen HD Photo-Codeckomponenten verwendet werden.
Komponente | Anzeigename | GUID |
---|---|---|
Containerformat | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
Decoder | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
Encoder | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
Codieren
Die WIC-Codierungs-API ist für die codecunabhängige Codierung und Bildcodierung für WIC-fähige Codecs im Wesentlichen identisch. Weitere Informationen zur Bildcodierung mithilfe der WIC-API finden Sie in der Codierungsübersicht.
Encoderoptionen
WIC-fähige Codecs unterscheiden sich auf der Codierungsoptionsebene. Encoderoptionen spiegeln die Funktionen eines Bildencoders wider, und jeder native Codec unterstützt eine Reihe dieser Encoderoptionen. Encoderoptionen können grundlegende WIC-unterstützte Optionen sein, die für alle WIC-fähigen Codes (die jedoch nicht unbedingt unterstützt werden) oder codecspezifische Optionen verfügbar sind, die vom Bildformatcodec entworfen wurden. Um diese Codierungsoptionen während des Codierungsprozesses zu verwalten, verwendet WIC die IPropertyBag2-Schnittstelle. Weitere Informationen zur Verwendung der IPropertyBag2-Schnittstelle für die WIC-Codierung finden Sie in der Codierungsübersicht.
Der HD Photo-Codec verwendet sowohl grundlegende WIC-Optionen als auch mehrere für HD Photo spezifische Codierungsoptionen. In der folgenden Tabelle sind die Encoderoptionen aufgeführt, die vom nativen HD Photo-Codec unterstützt werden.
Grundlegende WIC-Encoderoptionen
Eigenschaftenname | VARTYPE | Wertbereich | Standardwert |
---|---|---|---|
ImageQuality | VT_R4 | 0–1,0 | 0.9 |
Verlustfrei | VT_BOOL | TRUE, FALSE | FALSE |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
HD Photo-spezifische Encoderoptionen
Eigenschaftenname | VARTYPE | Wertbereich | Standardwert |
---|---|---|---|
UseCodecOptions | VT_BOOL | TRUE, FALSE | FALSE |
Quality | VT_UI1 | 1 - 255 | 10 |
Überlappung | VT_UI1 | 0–2 | 1 |
Subsampling | VT_UI1 | 0 – 3 | 3, wenn ImageQuality > 0,8; andernfalls 1; |
HorizontalTileSlices | VT_UI2 | 0–4095 | (Bildbreite – 1) >> 8 |
VerticalTileSlices | VT_UI2 | 0–4095 | (Bildhöhe – 1) >> 8 |
FrequencyOrder | VT_BOOL | TRUE, FALSE | TRUE |
InterleavedAlpha | VT_BOOL | TRUE, FALSE | FALSE |
AlphaQuality | VT_UI1 | 1 - 255 | 1 |
CompressedDomainTranscode | VT_BOOL | TRUE, FALSE | TRUE |
ImageDataDiscard | VT_UI1 | 0 – 3 | 0 |
AlphaDataDiscard | VT_UI1 | 0 -4 | Wird nicht verwendet. |
IgnoreOverlap | VT_BOOL | TRUE, FALSE | FALSE |
Wenn eine Encoderoption in der IPropertyBag2-Optionsliste vorhanden ist, die vom Codec nicht unterstützt wird, wird sie ignoriert.
ImageQuality-Option
Gibt die gewünschte Bildgenauigkeit an. 0,0 gibt die niedrigste mögliche Genauigkeit an, und 1,0 gibt die höchste Genauigkeit an. Für das HD Photo-Bildformat führt ein Wert von 1,0 zu einer mathematisch verlustfreien Komprimierung.
Der Standardwert ist 0,9.
CompressionQuality-Option
Gibt die gewünschte Komprimierungsqualität an. 0,0 gibt das verfügbare effiziente Komprimierungsschema an. In der Regel erzeugt dieses Schema eine schnellere Codierung, aber größere Ausgabe. Ein Wert von 1,0 gibt das effizienteste Komprimierungsschema an, das normalerweise eine längere Codierung erzeugt, aber eine kleinere Ausgabe.
HD Photo unterstützt diese Encoderoption nicht. Dieser Wert wird ignoriert, wenn er in der IPropertyBag2-Parameterliste vorhanden ist.
Option ohne Verlust
Gibt an, ob der Komprimierungsmodus für Verluste verwendet werden soll. Für das HD Photo-Bildformat setzt dieser Wert den ImageQuality-Optionswert außer Kraft.
Der Standardwert ist FALSE.
BitmapTransform-Option
Gibt an, wie das Bild während der Bilddecodierung transformiert wird. Sie müssen diese Option auf einen der WICBitmapTransformOptions-Enumerationswerte festlegen.
Der Standardwert ist WICBitmapTransformOptions::WICBitmapTransformRotate0.
UseCodecOptions-Option
Wenn der Wert VARIANT_TRUE lautet, werden die Optionen Qualität, Überlappung und Subsampling anstelle des Optionswerts verwendet.
Der Standardwert ist FALSE.
Qualitätsoption
Gibt die Komprimierungsqualität für das Bild an. Ein Wert von 1 gibt den verlustfreien Modus an. Steigende Werte führen zu höheren Komprimierungsverhältnissen und geringerer Bildqualität.
Der Standardwert ist 10.
Option „Überlappen“
Gibt die Ebene der Überlappungsverarbeitung an.
In der folgenden Tabelle sind die verfügbaren Überlappungsverarbeitungsebenen aufgeführt.
Wert | Beschreibung |
---|---|
0 | Es ist keine Überlappungsverarbeitung aktiviert. |
1 | Eine Ebene der Überlappungsverarbeitung ist aktiviert, wobei blockcodierte Werte der Größe 4×4 basierend auf Werten benachbarter Blöcke geändert werden. |
2 | Zwei Ebenen der Überlappungsverarbeitung sind aktiviert. Zusätzlich zur Verarbeitung auf der ersten Ebene werden codierte Werte von Makroblöcken mit der Größe 16×16 basierend auf den Werten benachbarter Makroblöcke geändert. |
Der Standardwert ist 1.
Option „Subsampling“
Gibt zusätzliche Komprimierung im Farbsättigungsbereich an. Auf diese Weise können Sie Leuchtdichtedetails auf Kosten von Farbdetails beibehalten. Diese Option gilt nur für RGB-Bilder.
In der folgenden Tabelle sind die verfügbaren Subsamplingoptionen aufgeführt.
Wert | Beschreibung |
---|---|
3 | Die 4:4:4-Codierung behält die volle Farbauflösung bei. |
2 | Die 4:2:2-Codierung reduziert die Farbauflösung auf die Hälfte der Leuchtdichteauflösung. |
1 | Die 4:2:0-Codierung reduziert die Farbauflösung auf ein Viertel der Leuchtdichteauflösung. |
0 | Die 4:0:0-Codierung verwirft alle Farbsättigungsinhalte und behält nur die Leuchtdichte bei. Da der Codec eine leicht modifizierte Definition der Leuchtdichte verwendet, um die Leistung zu verbessern, wird empfohlen, ein RGB-Bild vor der Codierung in Monochrom zu konvertieren, anstatt diesen Subsamplingmodus für die Farbauflösung zu verwenden. |
Der Standardwert ist 3, wenn ImageQuality> 0.8 entspricht; andernfalls 1.
HorizontalTileSlices-, VerticalTileSlices-Optionen
Geben Sie die horizontale und vertikale Anordnung des Bilds an, bevor Sie eine Komprimierungscodierung durchführen, um die optimale Leistung der Bereichsdecodierung zu erzielen. Indem Sie das Bild während der Codierung in rechteckige Kacheln unterteilen, können Sie Bereiche des Bilds decodieren, ohne den gesamten komprimierten Datenstrom zu verarbeiten. Der Standardwert von 0 gibt an, dass keine Unterteilung vorliegt, sodass das gesamte Bild als einzelne Kachel behandelt wird. Ein Wert von 1 für jeden Parameter erstellt eine einzelne horizontale und eine einzelne vertikale Division und teilt das Bild in vier Kacheln mit gleicher Größe auf. Der Maximalwert von 4095 für jeden Parameter teilt das Bild in 4096 Kachelzeilen mit 4096 Kacheln pro Zeile auf. Die Parameterwerte entsprechen also jeweils der Anzahl der horizontalen und vertikalen Kacheln minus 1. Eine Kachel kann niemals kleiner als 16 Pixel in Breite oder Höhe sein, sodass der HD Photo-Encoder diesen Parameter möglicherweise anpasst, um die erforderliche Mindestkachelgröße beizubehalten. Da jede Kachel mit Speicher- und Verarbeitungsaufwand einhergeht, sollten Sie diese Werte sorgfältig auswählen, um das spezifische Szenario zu erfüllen.
HorizontalTileSlices: Der Standardwert ist (Bildbreite – 1) >> 8.
VerticalTileSlices: Der Standardwert ist (Bildhöhe – 1) >> 8.
FrequencyOrder-Option
Gibt an, dass das Bild in der Frequenzreihenfolge codiert werden muss. Die niedrigsten Frequenzdaten werden zuerst in der Datei angezeigt, und der Bildinhalt wird nach seiner Frequenz und nicht nach seiner räumlichen Ausrichtung gruppiert. Das Organisieren einer Datei nach Frequenzreihenfolge bietet die beste Leistung für jede frequenzbasierte Decodierung, und wird daher empfohlen. Geräteimplementierungen von HD Photo-Encodern können eine Datei in räumlicher Anordnung organisieren, um den erforderlichen Speicherbedarf während der Codierung zu verringern.
Der Standardwert ist TRUE, und es wird empfohlen, dass Anwendungen und Geräte immer die Frequenzreihenfolge verwenden, es sei denn, es liegen leistungs- oder anwendungsspezifische Gründe für die Verwendung der räumlichen Anordnung vor.
InterleavedAlpha-Option
Wenn Sie diese Option auf TRUE festlegen, wird der Codec angewiesen, die Alphakanalinformationen als zusätzlichen überlappenden Kanal zu codieren, ohne eine Korrelation zu den Bildinhaltskanälen zu haben. Dieser Modus ist nützlich, wenn Sie Alpha gleichzeitig mit dem Bild in einem Streamingszenario decodieren müssen.
Das Festlegen dieses Parameters auf FALSE führt zu einem planaren Alphakanal, der als separates Bild mit einem eigenen optionalen Qualitätswert codiert ist. Mithilfe eines planaren Alphakanals können Sie die Bilddaten und den Alphakanal unabhängig voneinander decodieren. Überlappende Alphakanäle werden nur für bestimmte RGB-Pixelformate unterstützt. Sie können einen planaren Alphakanal einem beliebigen Bildformat zuordnen, das einen Alphakanal definiert.
Der Standardwert ist FALSE.
AlphaQuality-Option
Gibt die Komprimierungsqualität für das planare Alphakanalbild an. Ein Wert von 1 legt den verlustfreien Modus fest. Steigende Werte führen zu höheren Komprimierungsverhältnissen und geringerer Bildqualität.
Der Standardwert ist 1.
CompressedDomainTranscode-Option
Mithilfe von HD Photo können Sie eine Reihe von Dateitransformationsvorgängen ausführen, ohne die komprimierten Daten tatsächlich zu decodieren und sie erneut in der Zieldatei codieren zu müssen. Komprimierte Domänenvorgänge sind sehr effizient und vermeiden zusätzliche Qualitätsverluste, die typisch sind, wenn Sie ein verlustreich-komprimiertes Bild decodieren und neu codieren.
Die folgenden komprimierten Domänenvorgänge werden unterstützt:
- Zuschneiden eines Bereichs des Bilds
- Durchführen einer Drehtransformation
- Verwerfen von Frequenzdaten (ermöglicht die Erstellung einer kleineren Bilddatei)
- Neuanordnung des Bilds zwischen räumlicher und sequenzieller Frequenzreihenfolge
Der HD Photo-Encoder führt einen komprimierten Domänentranscodierungsvorgang durch, wenn er ein HD Photo-Bild mithilfe eines HD Photo-Decoders als Bildquelle codiert. Je nach ausgewählten Codierungsoptionen verwendet der Codec nach Möglichkeit einen komprimierten Domänenvorgang. Wenn eine Anwendung explizit komprimierte Domänentranscodierungsvorgänge verhindert, sollten Sie die Option UseCodecOptions auf TRUE und die Option CompressedDomainTranscode auf FALSE festlegen.
Wenn der Codec einen komprimierten Domänenvorgang ausführt, sind nur bestimmte Encoderparameter und Eigenschaftseinstellungen zulässig.
- Die grundlegenden Encoderoptionen ImageQuality, CompressionQuality und Lossless werden ignoriert.
- Die für HD Photo spezifischen Encoderoptionen Qualität, Überlappung, InterleavedAlpha und AlphaQuality werden ignoriert.
- Wenn vorhanden, müssen die Optionen HorizontalTileSlices und VerticalTileSlices auf 0 (null) festgelegt werden. Die Kachelgröße eines Bilds kann nicht als Teil einer komprimierten Domänentranscodierung geändert werden.
- Sie können die Bildorganisation zwischen Frequenz und räumlicher Anordnung ändern, indem Sie den geeigneten Wert der FrequencyOrdering-Optionen angeben.
- Basierend auf dem in der BitmapTransform-Encoderoption angegebenen Wert kann eine Kardinaldrehung und/oder ein horizontaler/vertikaler Drehvorgang ausgeführt werden.
- Das Bild kann zugeschnitten werden, indem der gewünschte Bereich mithilfe des WICRect-Parameters der WriteSource-Encodermethode angegeben wird.
- Bild- und/oder Alphadaten können verworfen werden, indem die entsprechenden Werte in den ImageDataDiscard- und/oder AlphaDataDiscard-Optionen angegeben werden, wodurch die codierte Dateigröße und die Auflösung des neuen Bilds effektiv reduziert wird.
Der Standardwert ist TRUE, und es wird empfohlen, dass Anwendungen und Geräte immer die Frequenzreihenfolge verwenden, es sei denn, es liegen leistungs- oder anwendungsspezifische Gründe für die Verwendung der räumlichen Anordnung vor.
ImageDataDiscard-Option
Dieser Parameter ist nur gültig, wenn die Option CompressedDomainTranscode TRUE lautet. Andernfalls wird er ignoriert. ImageDataDiscard gibt die Menge der Bilddaten an, die während einer komprimierten Domänentranscodierung verworfen werden sollen. Wenn das Bild einen überlappenden Alphakanal enthält, gelten diese Daten auch für den Alphakanal, wobei die Ausnahmen weiter unten in diesem Abschnitt beschrieben werden.
Die folgenden Werte werden sind zulässig.
Wert | Beschreibung |
---|---|
0 | Es werden keine Bildfrequenzdaten verworfen. |
1 | Die FlexBits werden verworfen, wodurch die Qualität des transcodierten Bilds willkürlich reduziert wird, ohne die effektive Auflösung des Bilds zu ändern. Die genaue Dateigrößenreduzierung oder die spezifische Qualitätsreduzierung hängt von zahlreichen Faktoren ab und kann nicht spezifiziert oder vorhergesagt werden. Dieser Wert gibt einen Fehler zurück, wenn Sie ihn für einen überlappenden Alphakanal angeben. |
2 | Der HighPass-Frequenzdatenbereich wird verworfen (das auch die flexBits enthält), wodurch die Auflösung des transcodierten Bilds um einen Faktor von 4 in beiden Dimensionen effektiv reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben gleich, aber es verliert alle Details in jedem 4×4-Pixelblock. Daher sollten Sie das transcodierte Bild beim Decodieren entsprechend komprimieren. |
3 | Sowohl der HighPass- als auch der LowPass-Frequenzdatenbereich werden verworfen (die auch die flexBits enthalten), wodurch die Auflösung des transcodierten Bilds um einen Faktor von 16 in beiden Dimensionen effektiv reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben gleich, aber es verliert alle Details in jedem 16×16-Makroblock. Daher sollten Sie das transcodierte Bild beim Decodieren entsprechend komprimieren. |
Der Standardwert ist 0.
AlphaDataDiscard-Option
Diese Option ist nur gültig, wenn die CompressedDomainTranscode-Eigenschaft WAHR ist und das Bild entweder einen planaren oder überlappenden Alphakanal enthält. Andernfalls wird sie ignoriert. Sie gibt die Menge der Alphafrequenzdaten an, die während einer komprimierten Domänentranscodierung verworfen werden sollen. Die folgenden Werte sind für einen planaren Alphakanal zulässig.
Wert | Beschreibung |
---|---|
0 | Es werden keine Bildfrequenzdaten verworfen. |
1 | Die FlexBits werden verworfen, wodurch die Qualität des planaren Alphakanals für das transcodierte Bild willkürlich reduziert wird, ohne die effektive Auflösung zu ändern. Die genaue Dateigrößenreduzierung oder die spezifische Qualitätsreduzierung hängt von zahlreichen Faktoren ab und kann nicht spezifiziert oder vorhergesagt werden. |
2 | Der HighPass-Frequenzdatenbereich wird verworfen (das auch die flexBits enthält), wodurch die Auflösung des transcodierten Bilds im planaren Alphakanal um einen Faktor von 4 in beiden Dimensionen effektiv reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben gleich, das Bild verliert jedoch alle planaren Alphakanaldetails in jedem 4×4-Pixelblock. Daher sollte das transcodierte Bild entsprechend komprimiert werden, wenn es decodiert wird. In der Regel sollten Sie diesen Wert nur festlegen, wenn Sie die ImageDataDiscard-Eigenschaft auf denselben Wert festlegen. |
3 | Sowohl der HighPass- als auch der LowPass-Frequenzdatenbereich werden verworfen (die auch die flexBits enthalten), wodurch die Auflösung des transcodierten Bilds um einen Faktor von 16 in beiden Dimensionen effektiv reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben gleich, aber es verliert alle Details in jedem 16×16-Makroblock. Daher sollte das transcodierte Bild entsprechend komprimiert werden, wenn es decodiert wird. In der Regel sollten Sie diesen Wert nur festlegen, wenn Sie die ImageDataDiscard-Eigenschaft auf denselben Wert festlegen. |
4 | Der Alphakanal wird vollständig verworfen. Das Pixelformat des transcodierten Bilds wird geändert, um das Entfernen des Alphakanals widerzuspiegeln. |
Bei Bildern, die überlappende Alphakanäle enthalten, wird der Alphakanal entsprechend dem Wert der ImageDataDiscard-Eigenschaft genauso wie die Bilddaten verarbeitet, es sei denn, die Eigenschaft ist auf 4 festgelegt. Wenn diese Eigenschaft auf 4 festgelegt ist, wird der überlappende Alphakanal vollständig verworfen, und das Pixelformat des transcodierten Bilds wird entsprechend geändert.
Für dieses Feld gibt es keinen Standardwert.
IgnoreOverlap-Option
Diese Option ist nur gültig, wenn die CompressedDomainTranscode-Eigenschaft TRUE ist und eine Teilbereichscodierung von genau einer oder mehreren Kacheln angefordert wird. Der Standardvorgang für die Transcodierung eines Bereichs (oder Decodierung) besteht darin, den angeforderten Bereich zu erweitern, um die umliegenden Pixel einzuschließen, die für die Überlappung der Bereichsränder erforderlich sind. Wenn dieser Parameter auf TRUE festgelegt ist, werden die umliegenden Pixel ignoriert und nur die ausgewählte Kachel bzw. ausgewählten Kacheln extrahiert. Dies erfordert auch, dass der angeforderte Bereich genau mit den Koordinaten einer oder mehrerer Kacheln übereinstimmt. Wenn das Quellbild nicht gekachelt ist oder der angeforderte Bereich Teilkacheln angibt, wird dieser Parameter ignoriert.
Der Standardwert ist FALSE.
Decodierung
Die WIC-Decodierungs-API für codecunabhängige Decodierung und Bilddecodierung für WIC-fähige Codecs ist im Wesentlichen identisch. Weitere Informationen zur Bilddecodierung finden Sie in der Übersicht über die Decodierung. Weitere Informationen zur Verwendung decodierter Bilddaten finden Sie in der Bitmapquellenübersicht.
IWICBitmapSourceTransform-Unterstützung
Zusätzlich zu den Schnittstellen, die erforderlich sind, damit diese als WIC-fähiger Codec bezeichnet werden können, unterstützt der native HD Photo-Decoder auch IWICBitmapSourceTransform. Die IWICBitmapSourceTransform-Schnittstelle bietet eine erweiterte Option zum Decodieren eines Bildbitstreams. Anstatt nur ein vollständiges Bild mit IWICBitmapFrameDecode zurückzugeben, ermöglicht die IWICBitmapSourceTransform-Schnittstelle die folgenden Decoderoptionen.
- Decodieren eines rechteckigen Teilbereichs des Bilds
- Decodieren in eine niedrigere Auflösung
- Decodieren in ein anderes Pixelformat
- Durchführen einer Transformation (Drehung) beim Decodieren
Der native HD Photo-Codec bietet die folgende Unterstützung für die IWICBitmapSourceTransform-Schnittstelle.
DoesSupportTransform
Die native Implementierung unterstützt alle WICBitmapTransformOptions-Transformationen.
GetClosestSize
Für Anforderungen, die kleiner als die Hälfte der Dimension des Quellbilds in beiden Dimensionen sind, gibt HD Photo die nächste größte ganzzahlige Bildgröße zurück, die gleichmäßig durch einen Faktor von 2 teilbar ist. Für alle anderen angeforderten Größen gibt HD Photo die ursprünglichen Bildabmessungen zurück.
GetClosestPixelFormat
HD Photo gibt das Pixelformat des codierten Bilds zurück.
CopyPixels
HD Photo akzeptiert alle vom WICRect-Parameter angegebenen angeforderten Bereiche und gibt diesen Teil des Bilds zurück.
Die Parameter uiWidth und uiHeight müssen Dimensionen angeben, die von der GetClosestSize-Funktion zurückgegeben werden. Alle anderen Werte geben einen Fehler zurück.
Der Parameter pguidDstFormat muss das Pixelformat angeben, das von der GetClosestPixelFormat-Funktion zurückgegeben wird. Jeder andere Wert gibt einen Fehler zurück.
HD Photo akzeptiert jeden zulässigen Wert für den dstTransform-Parameter. Beachten Sie, dass die von der Windows-Bilderstellungskomponente für diesen Parameter zulässigen Werte von den Werten abweichen, die von HD Photo für das Transformationsmetadatentag verwendet werden.