HD Photo フォーマットの概要

このトピックでは、Windows イメージング コンポーネント (WIC) で使用できるネイティブ HD フォト コーデックに関する情報を提供します。

重要

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

 

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

コーデック ID

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

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

 

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

コンポーネント フレンドリ名 GUID
コンテナーの形式 GUID_ContainerFormatWmp 57a37caa-367a-4540-916bf183c5093a4b
デコーダー CLSID_WICWmpDecoder a26cec36-234c-4950-ae16e34aace71d0d
エンコーダー CLSID_WICWmpEncoder ac4ce3cb-e1c1-44cd-82155a1665509ec2

 

Encoding

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

エンコーダー オプション

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

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

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

プロパティ名 VARTYPE 値の範囲 既定値
ImageQuality VT_R4 0 - 1.0 0.9
ロスレス VT_BOOL TRUEFALSE FALSE
BitmapTransform VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

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

プロパティ名 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
インターリーブAlpha 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 イメージ形式の場合、1.0 の値を指定すると、数学的に無損失の圧縮が行われます。

既定値は 0.9 です。

CompressionQuality オプション

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

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

ロスレス オプション

損失圧縮モードを使用するかどうかを指定します。 HD Photo イメージ形式の場合、この値は ImageQuality オプションの値をオーバーライドします。

既定値は FALSE です。

BitmapTransform オプション

イメージのデコード中にイメージを変換する方法を指定します。 このオプションは 、WICBitmapTransformOptions 列挙値のいずれかに設定する必要があります。

既定値は WICBitmapTransformOptions::WICBitmapTransformRotate0 です

UseCodecOptions オプション

値がオプション値の代わりに [品質]、[ オーバーラップ]、[ サブサンプリング ]のオプションVARIANT_TRUEされている場合。

既定値は FALSE です。

[品質設定]

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

既定値は 10 です。

[重複] オプション

重複処理のレベルを指定します。

次の表に、使用可能な重複処理レベルの一覧を示します。

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

 

既定値は 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 は、1 行あたり 4096 タイルの 4096 タイル行に画像を分割します。 言い換えると、パラメーター値は、水平タイルと垂直タイルの数 (それぞれ) から 1 を引いた値と等しくなります。 タイルの幅または高さは 16 ピクセル以下にすることはできません。そのため、HD Photo エンコーダーでは、必要な最小タイル サイズを維持するようにこのパラメーターを調整できます。 各タイルにはストレージと処理のオーバーヘッドが関連付けられているため、特定のシナリオに合わせてこれらの値を慎重に選択する必要があります。

HorizontalTileSlices: 既定値は (画像の幅 – 1) >> 8 です。

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

FrequencyOrder オプション

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

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

インターリーブAlpha オプション

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

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

既定値は FALSE です。

AlphaQuality オプション

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

既定値は 1 です。

CompressedDomainTranscode オプション

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

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

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

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

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

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

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

ImageDataDiscard オプション

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

次の値を使用できます。

説明
0 イメージの周波数データは破棄されません。
1 FlexBits は破棄され、画像の有効解像度を変更することなく、トランスコードされた画像の品質が任意に低下します。 正確なファイル サイズの削減または特定の品質の低下は、多数の要因に依存し、指定または予測することはできません。 この値は、インターリーブされたアルファ チャネルに対して指定した場合にエラーを返します。
2 HighPass 周波数データ バンドは破棄され (FlexBits も含まれます)、トランスコードされた画像の解像度が両方の次元で 4 倍削減されます。 トランスコードされた画像の実際のサイズは変わりませんが、ピクセルの各 4 x 4 ブロックのすべての詳細が失われます。 したがって、デコードするときは必ず、トランスコードされたイメージをダウンサンプリングする必要があります。
3 HighPassとLowPassの両方の周波数データバンドは破棄され(FlexBitsも含まれます)、トランスコードされた画像の解像度を両方の次元で16倍削減します。 トランスコードされたイメージの実際のサイズは変わりませんが、ピクセルの各 16 x 16 マクロ ブロックのすべての詳細が失われます。 したがって、デコードするときは必ず、トランスコードされたイメージをダウンサンプリングする必要があります。

 

既定値は 0 です。

AlphaDataDiscard オプション

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

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

 

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

既定値はありません。

IgnoreOverlap オプション

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

既定値は FALSE です。

デコード

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

IWICBitmapSourceTransform のサポート

WIC 対応コーデックとして必要なインターフェイスに加え、ネイティブ HD フォト デコーダーでは 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 で使用される値とは異なる点に注意してください。