HD Photo フォーマットの概要

このトピックでは、Windows Imaging Component (WIC) で利用できるネイティブ HD Photo コーデックについて説明します。

重要

HD Photo 形式は、JPEG XR 形式の事前標準の実装です。 JPEG XR 形式は Windows 8 で完全に実装されています。 詳細については、「 JPEG XR コーデックの概要 」を参照してください。

このトピックは、次のセクションで構成されています。

コーデック Id

次の表に、コーデックの識別情報を示します。

コンポーネント 説明
正式な名前 HD photo、Windows メディア写真
ファイル名拡張子 wdp
MIME の種類 (MIME type) image/vnd. ms-photo
ファイルの署名 最初の4バイト: 0x4の場合は bc00 (バージョン0、プレリリース)、0x4は、バージョン 1.0)

次の表は、ネイティブ HD Photo コーデックコンポーネントを識別するために使用される Guid を示しています。

コンポーネント フレンドリ名 GUID
コンテナーの形式 GUID _ ContainerFormatWmp 57a37caa-367a-4540-916bf183c5093a4b
デコーダー CLSID _ WICWmpDecoder a26cec36-234c-4950-ae16e34aace71d0d
エンコーダー CLSID _ WICWmpEncoder ac4ce3cb-e1c1 ~ 44 155a1665509ec2

エンコード

WIC encoding API はコーデックに依存しないように設計されており、WIC 対応コーデックのイメージエンコードは基本的に同じです。 WIC API を使用したイメージエンコードの詳細については、「 encoding の概要」を参照してください。

エンコーダーオプション

WIC が有効になっているコーデックは、エンコーディングオプションレベルと異なります。 エンコーダーのオプションはイメージエンコーダーの機能を反映しており、各ネイティブコーデックはこれらのエンコーダーオプションのセットをサポートしています。 エンコーダーオプションは、すべての WIC 対応コード (サポートされているわけではありません)、またはイメージ形式コーデックによって設計されたコーデック固有のオプションで使用できる、基本的な WIC でサポートされているオプションです。 エンコード処理中にこれらのエンコードオプションを管理するために、WIC では IPropertyBag2 インターフェイスが使用されます。 WIC エンコードに IPropertyBag2 インターフェイスを使用する方法の詳細については、「 encoding の概要」を参照してください。

HD Photo コーデックでは、基本的な WIC オプションの両方が使用され、HD Photo 固有のエンコードオプションがいくつか用意されています。 次の表に、ネイティブ HD Photo コーデックでサポートされるエンコーダーオプションを示します。

基本的な WIC エンコーダーオプション

プロパティ名 VARTYPE 値の範囲 既定値
ImageQuality VT _ R4 0 ~ 1.0 0.9
ロスレス VT _ BOOL TRUEFALSE FALSE
BitmapTransform VT _ UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

HD Photo 固有のエンコーダーオプション

プロパティ名 VARTYPE 値の範囲 既定値
UseCodecOptions VT _ BOOL TRUEFALSE FALSE
Quality VT _ UI1 1 - 255 10
重なる VT _ UI1 0 - 2 1
サブサンプリング VT _ UI1 0 - 3 ImageQuality 値 > 0.8; の場合は3それ以外の場合は1。
HorizontalTileSlices VT _ UI2 0 - 4095 (イメージの幅– 1) >> 8
VerticalTileSlices VT _ UI2 0 - 4095 (イメージの高さ– 1) >> 8
FrequencyOrder VT _ BOOL TRUEFALSE TRUE
InterleavedAlpha VT _ BOOL TRUEFALSE FALSE
AlphaQuality VT _ UI1 1 - 255 1
CompressedDomainTranscode VT _ BOOL TRUEFALSE TRUE
ImageDataDiscard VT _ UI1 0 - 3 0
AlphaDataDiscard VT _ UI1 0 - 4 使用されません。
IgnoreOverlap VT _ BOOL TRUEFALSE FALSE

コーデックでサポートされていないエンコーダーオプションが IPropertyBag2 オプションリストに存在する場合、このオプションは無視されます。

ImageQuality 値オプション

画像の忠実度を指定します。 0.0 は、精度が最も低いことを示し、1.0 は最高の忠実度を指定します。 HD Photo image 形式の場合、1.0 値は数学的なロスレス圧縮になります。

既定値は0.9 です。

CompressionQuality オプション

目的の圧縮品質を指定します。 0.0 は、効率的な圧縮スキーマが使用可能であることを示します。 通常、このスキーマでは、より高速なエンコードが生成されますが、出力は大きくなります。 値1.0 は、使用可能な最も効率的な圧縮スキーマを指定します。通常は、より長いエンコードが生成されますが、出力は小さくなります。

HD Photo では、このエンコーダーオプションはサポートされていません。 この値は、 IPropertyBag2 パラメーターリストに存在する場合は無視されます。

可逆オプション

損失の圧縮モードを使用するかどうかを指定します。 HD Photo image 形式の場合、この値は Imagequality 値オプションの値よりも優先されます。

既定値は FALSE です。

BitmapTransform オプション

画像のデコード中に画像をどのように変換するかを指定します。 このオプションは、 WICBitmapTransformOptions 列挙値のいずれかに設定する必要があります。

既定値は WICBitmapTransformOptions:: WICBitmapTransformRotate0です。

UseCodecOptions オプション

値がバリアントの場合は、オプションの値では _ なく、 Quality重なり、およびサブ サンプリング の各オプションを指定します。

既定値は FALSE です。

[品質設定]

イメージの圧縮の品質を指定します。 値1は無損失モードを示します。 値を大きくすると、圧縮率が高くなり、画質が低下します。

既定値は 10 です。

重複オプション

オーバーラップ処理のレベルを指定します。

次の表は、使用可能な重複処理レベルを示しています。

説明
0 オーバーラップ処理は有効ではありません。
1 1レベルのオーバーラップ処理が有効になっています。隣接するブロックの値に基づいて4×4のエンコードされた値を変更しています。
2 2 レベルのオーバーラップ処理が有効です。 最初のレベルの処理に加えて、16x16 マクロブロックのエンコードされた値は、隣接するマクロブロックの値に基づいて変更されます。

既定値は 1 です。

サブサンプリングオプション

クロマ領域に追加の圧縮を指定します。 この方法では、色の詳細を犠牲にして、輝度の詳細を保持できます。 このオプションは、RGB 画像にのみ適用されます。

次の表に、使用可能なサブサンプリングオプションを示します。

説明
3 4:4:4 エンコードは完全なクロマ解像度を保持します。
2 4:2:2 エンコーディングでは、クロマ解像度がルミナンス解像度の1/2 に減少します。
1 4:2:0 エンコーディングでは、クロマ解像度がルミナンス解像度の1/4 に減少します。
0 4:0:0 エンコードでは、すべてのクロマコンテンツが破棄され、輝度のみが保持されます。 コーデックは、わずかに変更された輝度の定義を使用してパフォーマンスを向上させるため、この彩度のサブサンプリングモードを使用するのではなく、エンコードの前に RGB イメージをモノクロに変換することをお勧めします。

Imagequality値 > 0.8; の場合、既定値は3です。それ以外の場合は1。

HorizontalTileSlices、VerticalTileSlices オプション

領域デコードの最適なパフォーマンスを実現するために圧縮エンコードを実行する前に、イメージの水平および垂直のタイルを指定します。 エンコード時にイメージを四角形のタイルに分割することで、圧縮されたデータストリーム全体を処理せずにイメージの領域をデコードできます。 既定値の0では、部分が指定されていないため、イメージ全体が1つのタイルとして扱われます。 各パラメーターに1を指定すると、1つの水平方向と1つの垂直方向の分割が作成され、イメージがサイズの等しい4つのタイルに効率的に分割されます。 各パラメーターの最大値が4095である場合、イメージは4096タイル行に分割され、行ごとに4096タイルが挿入されます。 つまり、パラメーター値は、水平および垂直のタイル (それぞれ) から1を引いた数と同じになります。 タイルは幅または高さが16ピクセルより小さくなることはないため、HD Photo encoder では、必要最小限のタイルサイズを維持するために、このパラメーターを調整することができます。 各タイルに関連付けられているストレージと処理のオーバーヘッドがあるため、特定のシナリオに合わせてこれらの値を慎重に選択する必要があります。

HorizontalTileSlices: 既定値は (Image Width – 1) >> 8 です。

VerticalTileSlices: 既定値は (Image Height – 1) >> 8 です。

FrequencyOrder オプション

イメージを周波数順にエンコードする必要があることを指定します。 ファイルの中で最も頻度の低いデータが最初に表示されます。画像コンテンツは、その領域の向きではなく、頻度でグループ化されます。 頻度順によってファイルを整理すると、頻度ベースのデコードに最適なパフォーマンスが得られるため、この方法をお勧めします。 HD Photo エンコーダーのデバイス実装では、ファイルを空間の順序で整理して、エンコード時に必要なメモリ使用量を減らすことができます。

既定値は TRUE であり、パフォーマンスまたはアプリケーション固有の理由で空間オーダーを使用する場合を除き、アプリケーションとデバイスは常に頻度の順序を使用することをお勧めします。

InterleavedAlpha オプション

このオプションを TRUE に設定すると、コーデックは、アルファチャネル情報を追加のインターリーブチャネルとしてエンコードするように、イメージコンテンツチャネルとの関連付けを行わずに指示します。 このモードは、ストリーミングシナリオで、イメージのアルファを同時にデコードする必要がある場合に便利です。

このパラメーターを FALSE に設定すると、平面アルファチャネルが生成され、独自のオプションの品質値を持つ別のイメージとしてエンコードされます。 平面アルファチャネルを使用すると、イメージデータとアルファチャネルを個別にデコードできます。 インターリーブアルファチャネルは、特定の RGB ピクセル形式に対してのみサポートされます。 平面アルファチャネルを、アルファチャネルを定義する任意のイメージ形式に関連付けることができます。

既定値は FALSE です。

AlphaQuality オプション

平面アルファチャネルイメージの圧縮品質を指定します。 値が1の場合は、可逆モードに設定します。 値を大きくすると、圧縮率が高くなり、画質が低下します。

既定値は 1 です。

CompressedDomainTranscode オプション

HD Photo を使用すると、圧縮されたデータを実際にデコードして変換先ファイルに再エンコードしなくても、多くのファイル変換操作を実行できます。 圧縮されたドメイン操作は非常に効率的であり、損失の多いイメージをデコードして再エンコードするときに通常は追加の品質の損失を回避します。

次の圧縮ドメイン操作がサポートされています。

  • イメージの領域をトリミングします。
  • 回転/反転変換を実行します。
  • 頻度データを破棄する (より小さいイメージファイルを作成できるようにする)。
  • 空間と頻度の連続した順序でイメージを再構成します。

Hd photo encoder は、hd フォトデコーダーをイメージソースとして使用して HD 写真の画像をエンコードするときに、圧縮されたドメインのトランスコード操作を実行します。 選択したエンコードオプションによっては、可能であれば、コーデックによって圧縮ドメイン操作が使用されます。 アプリケーションで、圧縮されたドメインのトランスコード操作を明示的に禁止することを選択した場合は、 UseCodecOptions オプションを TRUE に設定し、 CompressedDomainTranscode オプションを FALSE に設定する必要があります。

コーデックが圧縮ドメイン操作を実行する場合、特定のエンコーダーパラメーターとプロパティ設定のみが許可されます。

  • 基本的なエンコーダーオプション Imagequality 値CompressionQuality 、および 可逆 は無視されます。
  • HD Photo 固有のエンコーダーオプションの 品質オーバーラップInterleavedAlpha 、および AlphaQuality は無視されます。
  • 存在する場合は、 HorizontalTileSlices オプションと VerticalTileSlices オプションを0に設定する必要があります。 イメージのタイルサイズを、圧縮されたドメイントランスコードの一部として変更することはできません。
  • FrequencyOrderingオプションの適切な値を指定することで、イメージ編成を頻度と空間の順序の間で変更できます。
  • Bitmaptransform encoder オプションで指定された値に基づいて、カーディナルローテーションおよび/または水平/垂直方向の反転演算を実行できます。
  • イメージをトリミングするには、 Writesource encoder メソッドの WICRectパラメーターを使用して目的の領域を指定します。
  • ImagedatadiscardオプションまたはAlphaDataDiscardオプションに適切な値を指定し、エンコードされたファイルサイズを小さくして、新しいイメージの解像度を効果的に減らすことにより、画像やアルファデータを破棄できます。

既定値は TRUE であり、特定のパフォーマンスまたはアプリケーションの理由で空間の順序を使用する場合を除き、アプリケーションとデバイスは常に頻度の順序を使用することをお勧めします。

ImageDataDiscard オプション

このパラメーターは、 CompressedDomainTranscode オプションが TRUE の場合にのみ有効です。それ以外の場合は無視されます。 Imagedatadiscard は、圧縮されたドメインのトランスコード中に破棄するイメージデータの量を指定します。 イメージにインターリーブアルファチャネルが含まれている場合、このデータ破棄は、このセクションで後述する例外と共に、アルファチャネルにも適用されます。

次の値が許可されます。

説明
0 イメージの周波数データは破棄されません。
1 FlexBits は破棄されるため、イメージの有効な解像度を変更することなく、トランスコードされたイメージの品質を任意に縮小できます。 ファイルサイズの縮小または特定の品質の低下は、さまざまな要因に依存し、指定したり予測したりすることはできません。 この valuereturns は、インターリーブアルファチャネルに対して指定した場合、エラーになります。
2 ハイパス frequency データ帯域が破棄され (FlexBits も含まれます)、両方のディメンションで、トランスコードされたイメージの解像度を4倍に減らすことができます。 トランスコードされたイメージの実際の大きさは変わりませんが、ピクセルの4×4ブロックのすべての詳細が失われます。 そのため、デコードするたびに、トランスコードされたイメージをダウンサンプリングする必要があります。
3 ハイパスとローパス frequency の両方のデータバンドが破棄され (これには FlexBits も含まれます)、トランスコードされたイメージの解像度を、両方の次元で16倍に減らすことができます。 トランスコードされたイメージの実際の大きさは変わりませんが、各16x16 のマクロブロックのすべての詳細が失われます。 そのため、デコードするたびに、トランスコードされたイメージをダウンサンプリングする必要があります。

既定値は 0 です。

AlphaDataDiscard オプション

このオプションは、 CompressedDomainTranscode プロパティが TRUE で、イメージに平面またはインターリーブアルファチャネルが含まれている場合にのみ有効です。それ以外の場合は無視されます。 圧縮されたドメインのトランスコード中に破棄するアルファ周波数データの量を指定します。 平面アルファチャネルでは、次の値を使用できます。

説明
0 イメージの周波数データは破棄されません。
1 FlexBits は破棄され、有効な解像度を変更することなく、トランスコードされたイメージの平面アルファチャネルの品質を任意に縮小できます。 ファイルサイズの縮小または特定の品質の低下は、さまざまな要因に依存し、指定したり予測したりすることはできません。
2 ハイパス frequency データ帯域が破棄されます (これには、FlexBits も含まれています)。この場合、両方のディメンションで、トランスコードされたイメージ平面アルファチャネルの解像度を4倍に減らすことができます。 トランスコードされたイメージの実際の大きさは変わりませんが、ピクセルの4×4ブロックにあるすべての平面アルファチャネルの詳細が画像によって失われます。 そのため、トランスコードされたイメージは、デコードされるたびに、それに応じてダウンサンプリングする必要があります。 通常、この値は、ImageDataDiscard propertyto を同じ値に設定する場合にのみ設定してください。
3 ハイパスとローパス frequency の両方のデータバンドが破棄され (これには FlexBits も含まれます)、トランスコードされたイメージの解像度を、両方の次元で16倍に減らすことができます。 トランスコードされたイメージの実際の大きさは変わりませんが、イメージは、各16x16 のマクロブロックですべての詳細を失います。 そのため、トランスコードされたイメージは、デコードされるたびに、それに応じてダウンサンプリングする必要があります。 通常、この値は、ImageDataDiscard プロパティを同じ値に設定する場合にのみ設定してください。
4 アルファチャネルは完全に破棄されます。 トランスコードされたイメージのピクセル形式は、アルファチャネルの削除を反映して変更されます。

インターリーブされたアルファチャネルを含むイメージの場合、このプロパティが4に設定されていない限り、イメージデータと同じように、ImageDataDiscard プロパティの値に従ってアルファチャネルが処理されます。 このプロパティが4に設定されている場合、インターリーブされたアルファチャネルは完全に破棄され、トランスコードされたイメージのピクセル形式がそれに応じて変更されます。

既定値はありません。

IgnoreOverlap オプション

このオプションは、 CompressedDomainTranscode プロパティが TRUE で、1つ以上のタイルのサブ領域のトランスコードが要求されている場合にのみ有効です。 領域のトランスコード (またはデコード) の既定の操作では、要求された領域を展開して、領域のエッジの重複デコードに必要な周囲のピクセルを含めます。 このパラメーターが TRUE に設定されている場合、周囲のピクセルは無視され、選択されたタイルまたはタイルのみが抽出されます。 ここでも、要求された領域が1つ以上のタイルの座標と完全に一致している必要があります。 ソースイメージが並べて表示されない場合、または要求された領域で部分的なタイルが指定されている場合、このパラメーターは無視されます。

既定値は FALSE です。

デコード

WIC デコード API はコーデックに依存しないように設計されており、WIC 対応コーデックのイメージデコードは基本的に同じです。 イメージのデコードの詳細については、「 デコードの概要」を参照してください。 デコードされた画像データの使用方法の詳細については、「 ビットマップソースの概要」を参照してください。

IWICBitmapSourceTransform のサポート

WIC が有効なコーデックにするために必要なインターフェイスに加えて、ネイティブ HD Photo デコーダーは IWICBitmapSourceTransformもサポートしています。 IWICBitmapSourceTransform インターフェイスは、イメージビットストリームをデコードするための高度なオプションを提供します。 IWICBitmapFrameDecodeを使用して完全なイメージを返すだけでなく、 IWICBitmapSourceTransform インターフェイスでは次のデコーダーオプションが有効になります。

  • イメージの四角形のサブ領域をデコードします。
  • 低解像度にデコードする
  • 別のピクセル形式にデコードする
  • デコード中に変換 (回転/反転) を実行する

ネイティブ HD Photo コーデックは 、IWICBitmapSourceTransform インターフェイスに対して次のレベルのサポートを提供します。

DoesSupportTransform

ネイティブ実装では、 すべての WICBitmapTransformOptions 変換が サポートされます。

GetClosestSize

両方の次元のソース 画像の次元が 1/2 未満の要求の場合、HD Photo は、2 要素で割り切り可能な次の最大の整数画像サイズを返します。 その他すべての要求されたサイズについて、HD Photo は元の画像のサイズを返します。

GetClosestPixelFormat

HD Photo は、エンコードされた画像のピクセル形式を返します。

CopyPixels

HD Photo は 、WICRect パラメーターで指定された要求されたリージョンを受け入れ、イメージのその部分を返します。

uiWidth パラメーターと uiHeight パラメーターでは 、GetClosestSize 関数から返されるディメンションを指定する必要があります。 その他の値はエラーを返します。

pguidDstFormat パラメーターは 、GetClosestPixelFormat関数によって返されるピクセル形式を指定する必要があります。 その他の値はエラーを返します。

HD Photo は 、dstTransform パラメーターに許容される任意の値を受け取 ります。 このパラメーターに対して WIC で許可される値は、変換メタデータ タグに HD Photo で使用される値とは異なっています。