Implementierungsrichtlinien für die Serialisierung von IWICDevelopRaw Einstellungen
Die IWICDevelopRaw-Schnittstelle macht Einstellungen verfügbar, die die Anwendung verwenden kann, um die Verarbeitung des RAW-Images zu ändern. Die Einstellungen sollten serialisiert werden können, damit sie sitzungsübergreifend beibehalten werden. Obwohl dies auf verschiedene Weise erfolgen kann, wird empfohlen, diese Daten auf eine Weise zu codieren, die mit anderen Metadaten konsistent ist.
Es folgen einige allgemeine Implementierungsrichtlinien:
Alle Einstellungen, die über IWICDevelopRaw (z. B. Drehung oder Weißabgleich) vorgenommen werden, sollten das Überschreiben von Kameraeinstellungen oder "as-shot"-Daten vermeiden, es sei denn, das Tag wird häufig als "aktuelle Einstellung" verwendet. Beispielsweise können EXIF-Ausrichtungstags verwendet werden, um die Rotation dauerhaft zu speichern.
Es empfiehlt sich, nicht jedes Mal die gesamte Datei (einschließlich der Pixeldaten) speichern zu müssen, wenn die IWICDevelopRaw-Einstellungen zur Serialisierung aufgefordert werden.
Der Prozess der Serialisierung von IWICDevelopRaw-Einstellungen folgt in der Regel dieser Reihenfolge von Ereignissen. Für die Anwendung gilt Folgendes:
Instanziiert einen IWICBitmapDecoder in einer RAW-Datei.
Ruft IWICBitmapDecoder::GetFrame auf, um einen IWICBitmapFrameDecode für den RAW-Frame abzurufen.
Ruft QueryInterface für die IWICBitmapFrameDecode-Schnittstelle für die IWICDevelopRaw-Schnittstelle auf.
Ruft IWICDevelopRaw::GetCurrentParameterSetauf, das eine IPropertyBag2-Schnittstelle mit allen darin gespeicherten aktuellen Eigenschaften zurückgibt.
An diesem Punkt des Prozesses besteht das Ziel darin, die Einstellungen in der IPropertyBag2-Schnittstelle in die RAW-Datei zu serialisieren. Hierzu müssen Sie einen Encoder einrichten usw. Dies wird in den folgenden Schritten ausführlich beschrieben.
Erstellt einen IWICBitmapEncoder für die RAW-Datei.
Ruft IWICBitmapEncoder auf:Initialisieren Sie, und übergeben Sie einen neuen (leeren) Datenstrom zum Codieren.
Ruft IWICBitmapEncoderauf:CreateNewFrame, um einen neuen IWICBitmapFrameEncode für den RAW-Frame zu erstellen.
Ruft IWICBitmapFrameEncode::Initialisierenvon auf und übergibt die IPropertyBag2-Schnittstelle aus Schritt 4.
Ruft IWICBitmapFrameEncodeauf:WriteSource mit IWICBitmapSource aus dem RAW-Bildrahmen des Decoders.
Ruft IWICBitmapFrameEncodeauf:Commit . Der Codec serialisiert dann die Eigenschaften im IPropertyBag2 aus Schritt 8 in die Datei. Die gängigste Methode zum Serialisieren der Eigenschaften wird angenommen, indem sie als Metadaten in die Datei geschrieben werden.
Ruft IStream::Commit für den Stream in Schritt 6 auf.
Die Einstellungen werden in der Datei serialisiert.
Diese Methode verursacht die Kosten für das erneute Schreiben der gesamten RAW-Datei jedes Mal, wenn die Einstellungen serialisiert werden. Dies kann vermieden werden, wenn Sie IWICFastMetadataEncoder implementieren oder wenn Ihr Bilddateiformat XMP oder EXIF unterstützt, da WIC IWICFastMetadataEncoder für beide Formate bereitstellt. Wenn Ihr Codec Änderungen am Ende der Bilddatei schreibt, werden Sie am Ende nicht die gesamte Bilddatei neu schreiben.
Parametersätze werden aus dem serialisierten Zustand geladen, wenn die Anwendung die WICRawParameterSet.WICUserAdjustedParameterSet-Enumeration für die IWICDevelopRaw::LoadParameterSet-Methode festlegt. Das Flag WICRawParameterSet.WICUserAdjustedParameterSet bezieht sich auf den zuletzt gespeicherten Parametersatz, sodass eine Last mit diesem Flag dazu führen sollte, dass Parameter im zuletzt gespeicherten Zustand wiederhergestellt werden.
Beim ersten Laden sollte der zuletzt gespeicherte Parametersatz geladen werden( falls verfügbar). Falls nicht, sollten die "as-shot"-Einstellungen als Voreinstellungen für die IWICDevelopRaw-Schnittstellenvariablen verwendet werden. Diese as-shot-Einstellungen können auch mithilfe des WICRawParameterSet.WICAsShotParameterSet-Flags geladen werden.
Der Bezeichner WICRawParameterSet.WICAutoAdjustedParameterSet soll eine "Auto"-Einstellung darstellen. Der Codec-Designer kann einen der folgenden Ansätze zum Festlegen von IWICDevelopRaw-Parametern auswählen, wenn diese Einstellung vorgenommen wird:
- Führen Sie eine algorithmische Optimierung einiger Parameter aus, z. B. Belichtung oder Farbe. Auf diese Weise funktioniert Auto in typischen Bild-Editoren und basiert in erster Linie auf der Pixeldatenanalyse.
- Legen Sie Kameraeinstellungen ähnlich dem Verhalten einer Auto-Einstellung fest. Dies ist nützlich, wenn das Bild mit einer Manuell-Einstellung erstellt wurde und es dem Benutzer ermöglicht, manuelle Einstellungen außer Kraft zu setzen.
- Sie unternehmen nichts. Nicht alle Steuerelemente müssen festgelegt werden, wenn Auto ausgewählt ist, und es ist in Ordnung, die Einstellungen unverändert zu lassen.
Die Windows Vista Fotogalerie und Windows Live Fotogalerie Bearbeitungstools und andere Bearbeitungsanwendungen verwenden die IWICDevelopRaw Auto-Parameterauslastung, wenn der Benutzer automatisch korrigieren für alle normalen Anpassungen der Codecsteuerung wie Farbe und Belichtung auswählt, um die besten Ergebnisse zu erzielen.