Übersicht über das HD-Fotoformat
Dieses Thema enthält Informationen zum nativen HD-Fotocodec, der über die Windows Imaging Component (WIC) verfügbar ist.
Wichtig
Das HD-Fotoformat ist eine Vorstandardimplementierung des JPEG-XR-Formats. Das JPEG-XR-Format wurde vollständig in Windows 8. Weitere Informationen finden Sie in der ÜBERSICHT ÜBER DEN JPEG XR-Codec.
Dieses Thema enthält folgende Abschnitte:
Codec-Identität
Die folgende Tabelle enthält Codec-Identifikationsinformationen.
| Komponente | Beschreibung |
|---|---|
| Formale Namen | HD-Foto, Windows Medienfoto |
| Dateinamenerweiterung(en) | Wdp |
| MIME-Typ (MIME type) | image/vnd.ms-photo |
| Dateisignaturen | Erste vier Bytes: 0x4949bc00 (Version 0; Vorabversion), 0x4949bc01 (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 |
Codierung
Die WIC-Codierungs-API ist codecunabhängig, und die Bildcodierung für WIC-fähige Codecs ist im Wesentlichen identisch. Weitere Informationen zur Bildcodierung mithilfe der WIC-API finden Sie unter Übersicht über die Codierung.
Encoderoptionen
WIC-fähige Codecs unterscheiden sich auf der Ebene der Codierungsoption. Encoderoptionen spiegeln die Funktionen eines Bildencoder wider, und jeder native Codec unterstützt einen Satz dieser Encoderoptionen. Encoderoptionen können grundlegende WIC-unterstützte Optionen sein, die für alle WIC-fähigen Codes (wenn auch nicht unbedingt unterstützt) 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 unter Übersicht über die Codierung.
Der HD Photo-Codec verwendet beide grundlegenden WIC-Optionen und bietet mehrere HD Photo-spezifische Codierungsoptionen. In der folgenden Tabelle sind die Encoderoptionen aufgeführt, die vom nativen HD-Fotocodec unterstützt werden.
Grundlegende WIC-Encoderoptionen
| Eigenschaftenname | VARTYPE | Wertbereich | Standardwert |
|---|---|---|---|
| ImageQuality | VT _ R4 | 0 - 1.0 | 0.9 |
| Lossless | VT _ BOOL | TRUE, FALSE | FALSE |
| BitmapTransform | VT _ UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
HD Photo Specific Encoder Options
| Eigenschaftenname | VARTYPE | Wertbereich | Standardwert |
|---|---|---|---|
| UseCodecOptions | VT _ BOOL | TRUE, FALSE | FALSE |
| Qualität | VT _ UI1 | 1 - 255 | 10 |
| Überlappen | VT _ UI1 | 0 - 2 | 1 |
| Subsampling | VT _ UI1 | 0 – 3 | 3, wenn ImageQuality > 0.8 ist; 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 der Codec nicht unterstützt, wird sie ignoriert.
ImageQuality-Option
Gibt die gewünschte Bildgenauigkeit an. 0.0 gibt die geringstmögliche Genauigkeit und 1,0 die höchste Genauigkeit an. Für das HD-Fotobildformat führt ein 1,0-Wert zu einer mathematischen verlustlosen 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 eine größere Ausgabe. Der Wert 1.0 gibt das effizienteste verfügbare Komprimierungsschema an, das in der Regel eine längere Codierung, aber eine kleinere Ausgabe erzeugt.
HD Photo unterstützt diese Encoderoption nicht. Dieser Wert wird ignoriert, wenn er in der IPropertyBag2-Parameterliste vorhanden ist.
Verlustlose Option
Gibt an, ob der Verlustkomprimierungsmodus verwendet werden soll. Für das HD-Fotobildformat überschreibt dieser Wert den Wert der Option ImageQuality.
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 ist, werden die Optionen Quality, Overlapund Subsampling anstelle des Optionswerts verwendet.
Der Standardwert ist FALSE.
Quality-Option
Gibt die Komprimierungsqualität für das Bild an. Der Wert 1 gibt den verlustlosen Modus an. Das Erhöhen von Werten führt zu einem höheren Komprimierungsverhältnis und einer niedrigeren Bildqualität.
Der Standardwert ist 10.
Überlappungsoption
Gibt die Ebene der Überlappungsverarbeitung an.
In der folgenden Tabelle sind die verfügbaren Überlappungsverarbeitungsebenen aufgeführt.
| Wert | Beschreibung |
|---|---|
| 0 | Überlappungsverarbeitung ist nicht aktiviert. |
| 1 | Eine Ebene der Überlappungsverarbeitung ist aktiviert, bei der 4x4-blockcodierte Werte basierend auf Werten benachbarter Blöcke geändert werden. |
| 2 | Zwei Überlappungsverarbeitungsebenen sind aktiviert. Zusätzlich zur Verarbeitung der ersten Ebene werden codierte Werte von 16x16-Makroblöcken basierend auf den Werten benachbarter Makroblöcke geändert. |
Der Standardwert ist 1.
Subsamplingoption
Gibt zusätzliche Komprimierung im Komprimierungsraum an. Auf diese Weise können Sie die Details der Leuchtdichte auf Kosten der Farbdetails beibehalten. Diese Option gilt nur für RGB-Bilder.
In der folgenden Tabelle sind die verfügbaren Unterbeispieloptionen aufgeführt.
| Wert | Beschreibung |
|---|---|
| 3 | Die 4:4:4-Codierung behält die vollständige Auflösung bei. |
| 2 | Die 4:2:2-Codierung reduziert die Auflösung der Farbauflösung auf 1/2 der Leuchtdichteauflösung. |
| 1 | Die 4:2:0-Codierung reduziert die Auflösung der Farbauflösung auf 1/4 der Leuchtdichteauflösung. |
| 0 | Die 4:0:0-Codierung verwirft alle Inhalte und behält nur die Leuchtdichte bei. Da der Codec eine leicht geänderte Definition der Leuchtdichte verwendet, um die Leistung zu verbessern, empfiehlt es sich, ein RGB-Bild vor der Codierung in monofarbig zu konvertieren, anstatt diesen Subsamplingmodus zu verwenden. |
Der Standardwert ist 3, wenn ImageQuality > 0,8; andernfalls 1.
HorizontalTileSlices, VerticalTileSlices-Optionen
Geben Sie die horizontale und vertikale Kacheln des Bilds an, bevor Sie die 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 0 gibt keine Unterteilung an, sodass das gesamte Bild als einzelne Kachel behandelt wird. Der Wert 1 für jeden Parameter erstellt eine einzelne horizontale und eine einzelne vertikale Division, die das Bild effektiv in vier gleich große Kacheln aufteilt. Der Maximalwert 4095 für jeden Parameter teilt das Bild in 4096 Kachelzeilen mit 4096 Kacheln pro Zeile auf. Anders ausgedrückt: Die Parameterwerte sind gleich der Anzahl der horizontalen und vertikalen Kacheln (bzw. minus 1). Eine Kachel darf nie kleiner als 16 Pixel in Breite oder Höhe sein, daher kann der HD-Fotoencoder diesen Parameter anpassen, um die erforderliche Minimale Kachelgröße zu erhalten. Da jeder Kachel Speicher- und Verarbeitungsaufwand zugeordnet ist, 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 Reihenfolge der Häufigkeit codiert werden muss. Die Daten mit der niedrigsten Häufigkeit werden zuerst in der Datei angezeigt, und der Bildinhalt wird nach seiner Häufigkeit und nicht nach seiner räumlichen Ausrichtung gruppiert. Das Organisieren einer Datei nach Häufigkeits reihenfolge bietet die beste Leistung für jede häufigkeitsbasierte Decodierung und wird daher empfohlen. Geräteimplementierungen von HD-Fotoencodern können eine Datei in räumlicher Reihenfolge organisieren, um den während der Codierung erforderlichen Speicherbedarf zu reduzieren.
Der Standardwert ist TRUE, und es wird empfohlen, dass Anwendungen und Geräte immer die Häufigkeits reihenfolge verwenden, es sei denn, Sie haben leistungs- oder anwendungsspezifische Gründe für die Verwendung der räumlichen Reihenfolge.
InterleavedAlpha-Option
Durch Festlegen dieser Option auf TRUE wird der Codec angewiesen, die Alphakanalinformationen als zusätzlichen verwebten Kanal ohne Korrelation mit den Bildinhaltskanälen zu codieren. 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 Quality-Wert codiert ist. Mit einem planaren Alphakanal können Sie die Bilddaten und den Alphakanal unabhängig decodieren. Überlappte Alphakanäle werden nur für bestimmte RGB-Pixelformate unterstützt. Sie können einen planaren Alphakanal jedem Bildformat zuordnen, das einen Alphakanal definiert.
Der Standardwert ist FALSE.
AlphaQuality-Option
Gibt die Komprimierungsqualität für das planare Alphakanalbild an. Der Wert 1 legt den verlustlosen Modus fest. Das Erhöhen von Werten führt zu einem höheren Komprimierungsverhältnis und einer niedrigeren Bildqualität.
Der Standardwert ist 1.
CompressedDomainTranscode-Option
Mit HD Photo können Sie eine Reihe von Dateitransformationsvorgängen ausführen, ohne die komprimierten Daten tatsächlich zu decodieren und in die Zieldatei neu zu codieren. Vorgänge für komprimierte Domänen sind sehr effizient und vermeiden zusätzliche Qualitätsverluste, die typisch sind, wenn Sie ein verlustverknrücktes Bild decodieren und erneut codieren.
Die folgenden Vorgänge für komprimierte Domänen werden unterstützt:
- Zuschneiden eines Bildbereichs.
- Führen Sie eine Drehungs-/Kipptransformation aus.
- Verwerfen von Häufigkeitsdaten (wodurch eine kleinere Bilddatei erstellt werden kann)
- Organisieren Sie das Bild in der sequenziellen Reihenfolge zwischen räumlicher Reihenfolge und Häufigkeit neu.
Der HD Photo-Encoder führt einen komprimierten Domänentranscodierungsvorgang aus, wenn er ein HD-Fotobild mithilfe eines HD-Fotodecoders als Bildquelle codiert. Abhängig von den ausgewählten Codierungsoptionen verwendet der Codec nach Möglichkeit einen komprimierten Domänenvorgang. Wenn eine Anwendung sich dafür entscheidet, transcodierte Domänentranscodierungsvorgänge explizit zu verhindern, 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 Eigenschafteneinstellungen zulässig.
- Die grundlegenden Encoderoptionen ImageQuality, CompressionQuality und Lossless werden ignoriert.
- Die HD Photo-spezifischen Encoderoptionen Quality, Overlap, InterleavedAlpha und AlphaQuality werden ignoriert.
- Falls 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 Häufigkeit und räumlicher Reihenfolge ändern, indem Sie den entsprechenden Wert der FrequencyOrdering-Optionen angeben.
- Eine Kardinalrotation und/oder ein horizontaler/vertikaler Kippvorgang kann basierend auf dem in der BitmapTransform-Encoderoption angegebenen Wert 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 Optionen ImageDataDiscard und/oder AlphaDataDiscard angegeben werden, um die codierte Dateigröße zu reduzieren und die Auflösung des neuen Bilds effektiv zu reduzieren.
Der Standardwert ist TRUE, und es wird empfohlen, dass Anwendungen und Geräte immer die Häufigkeits reihenfolge verwenden, es sei denn, Sie haben bestimmte Leistungs- oder Anwendungsgründe, um die räumliche Reihenfolge zu verwenden.
ImageDataDiscard-Option
Dieser Parameter ist nur gültig, wenn die CompressedDomainTranscode-Option TRUE ist. Andernfalls wird es ignoriert. ImageDataDiscard gibt die Menge der Bilddaten an, die während einer komprimierten Domänentranscodierung verworfen werden. Wenn das Bild einen überlappten Alphakanal enthält, gilt dieser Datenverwerfen auch für den Alphakanal, mit den Ausnahmen, wie weiter unten in diesem Abschnitt beschrieben.
Die folgenden Werte 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 Verringerung der Dateigröße oder die spezifische Qualitätsreduzierung hängt von zahlreichen Faktoren ab und kann nicht angegeben oder vorhergesagt werden. Dieser Wert gibt einen Fehler zurück, wenn Sie ihn für einen überlappten Alphakanal angeben. |
| 2 | Das HighPass frequency-Datenband wird verworfen (einschließlich FlexBits), wodurch die Auflösung des transcodierten Bilds in beiden Dimensionen um den Faktor 4 reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben unverändert, es gehen jedoch alle Details in jedem 4x4-Pixelblock verloren. Aus diesem Grund sollten Sie das transcodierte Bild bei jeder Decodierung entsprechend abkodieren. |
| 3 | Sowohl die Hochpass- als auch die LowPass-Frequenzdatenbereiche werden verworfen (einschließlich flexBits), wodurch die Auflösung des transcodierten Bilds in beiden Dimensionen um den Faktor 16 reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben unverändert, es gehen jedoch alle Details in jedem 16x16-Makroblock von Pixeln verloren. Aus diesem Grund sollten Sie das transcodierte Bild bei jeder Decodierung entsprechend abkodieren. |
Der Standardwert ist 0.
AlphaDataDiscard-Option
Diese Option ist nur gültig, wenn die CompressedDomainTranscode-Eigenschaft TRUE ist und das Bild entweder einen planaren oder überlappten Alphakanal enthält. Andernfalls wird es ignoriert. Sie gibt die Menge der Alphafrequenzdaten an, die während einer komprimierten Domänentranscodierung verworfen werden. 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 Verringerung der Dateigröße oder die spezifische Qualitätsreduzierung hängt von zahlreichen Faktoren ab und kann nicht angegeben oder vorhergesagt werden. |
| 2 | Das HighPass frequency-Datenband wird verworfen (einschließlich FlexBits), wodurch die Auflösung des transcodierten bildplanaren Alphakanals in beiden Dimensionen um den Faktor 4 reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben unverändert, aber das Bild verliert alle planaren Alphakanaldetails in jedem 4x4-Pixelblock. Aus diesem Grund sollte das transcodierte Bild bei jeder Decodierung entsprechend herunterstastiert werden. In der Regel sollten Sie diesen Wert nur festlegen, wenn Sie die ImageDataDiscard-Eigenschaft auf denselben Wert festlegen. |
| 3 | Sowohl die Hochpass- als auch die LowPass-Frequenzdatenbereiche werden verworfen (einschließlich flexBits), wodurch die Auflösung des transcodierten Bilds in beiden Dimensionen um den Faktor 16 reduziert wird. Die tatsächlichen Abmessungen des transcodierten Bilds bleiben unverändert, aber das Bild verliert alle Details in jedem 16 x 16-Makroblock von Pixeln. Aus diesem Grund sollte das transcodierte Bild bei jeder Decodierung entsprechend herunterstastiert werden. 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 widerzubilden. |
Für Bilder, die überlappte Alphakanäle enthalten, wird der Alphakanal gemäß dem Wert der ImageDataDiscard-Eigenschaft genauso wie die Bilddaten verarbeitet, es sei denn, diese Eigenschaft ist auf 4 festgelegt. Wenn diese Eigenschaft auf 4 festgelegt ist, wird der überlappte 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 Unterbereichstranscodierung von genau einer oder mehreren Kacheln angefordert wird. Der Standardvorgang für eine Region-Transcodierung (oder -decodierung) besteht im Erweitern des angeforderten Bereich um die umgebenden Pixel, die für die Überlappung der Randbereichsdecodierung erforderlich sind. Wenn dieser Parameter auf TRUE festgelegt ist, werden die umgebenden Pixel ignoriert, und nur die ausgewählten Kacheln werden extrahiert. Auch dies erfordert, dass der angeforderte Bereich genau mit den Koordinaten einer oder mehrere Kacheln übereinstimmen muss. Wenn das Quellbild nicht gekachelt ist oder der angeforderte Bereich partielle Kacheln angibt, wird dieser Parameter ignoriert.
Der Standardwert ist FALSE.
Decodierung
Die WIC-Decodierungs-API ist codecunabhängig, und die 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 von decodierten Bilddaten finden Sie in der Übersicht über Bitmapquellen.
IWICBitmapSourceTransform-Unterstützung
Zusätzlich zu den Schnittstellen, die als WIC-fähiger Codec erforderlich sind, 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 mitHILFE von IWICBitmapFrameDecode zurückgebenzu können, aktiviert die IWICBitmapSourceTransform-Schnittstelle die folgenden Decoderoptionen.
- Decodieren Sie einen rechteckigen Unterbereich des Bilds.
- Decodieren in eine niedrigere Auflösung
- Decodieren in ein anderes Pixelformat
- Durchführen einer Transformation (Drehung/Kippen) während der Decodierung
Der native HD-Fotocodec bietet die folgende Unterstützungsebene für die IWICBitmapSourceTransform-Schnittstelle.
DoesSupportTransform
Die native Implementierung unterstützt alle WICBitmapTransformOptions-Transformationen.
GetClosestSize
Für Anforderungen, die kleiner als 1/2 die Dimension des Quellbilds in beiden Dimensionen sind, gibt HD Photo die nächste größte ganzzahlige Bildgröße zurück, die gleichmäßig um den Faktor 2 teilbar ist. Für alle anderen angeforderten Größen gibt HD Photo die ursprünglichen Bilddimensionen zurück.
GetClosestPixelFormat
HD Photo gibt das Pixelformat des codierten Bilds zurück.
Copypixels
HD Photo akzeptiert alle angeforderten Bereiche, die durch den WICRect-Parameter angegeben werden, und gibt diesen Teil des Bilds zurück.
Die Parameter uiWidth und uiHeight müssen Dimensionen angeben, wie sie von der GetClosestSize-Funktion zurückgegeben werden. Alle anderen Werte geben einen Fehler zurück.
Der pguidDstFormat-Parameter muss das von der GetClosestPixelFormat-Funktion zurückgegebene Pixelformat angeben. Jeder andere Wert gibt einen Fehler zurück.
HD Photo akzeptiert jeden zulässigen Wert für den dstTransform-Parameter. Beachten Sie, dass sich die von WIC für diesen Parameter zulässigen Werte von den Werten unterscheiden, die von HD Photo für das Transformationsmetadatentag verwendet werden.