HD Photo フォーマットの概要
このトピックでは、Windows Imaging Component (WIC) で使用できるネイティブ (組み込み) HD Photo コーデックに関する情報を提供します。
重要
HD Photo 形式は JPEG XR 形式のプレスタンダード実装であり、HD Photo のサポートは JPEG XR WIC コーデックによって実装されます。 詳細については、「JPEG XR コーデックの概要」を参照してください。
コーデック ID
次の表に、コーデック識別情報を示します。
コンポーネント | 説明 |
---|---|
正式名 | HD Photo、Windows Media Photo |
ファイル名拡張子 | wdp |
MIME の種類 | image/vnd.ms-photo |
ファイルの署名 | 最初の 4 バイト: 0x4949bc00 (バージョン 0、プレリリース)、0x4949bc01 (バージョン 1.0) |
次の表に、ネイティブ HD Photo コーデック コンポーネントを識別するために使用される GUID の一覧を示します。
コンポーネント | フレンドリ名 | GUID |
---|---|---|
コンテナー形式 | GUID_ContainerFormatWmp | 57a37caa-367a-4540-916bf183c5093a4b |
デコーダー | CLSID_WICWmpDecoder | a26cec36-234c-4950-ae16e34aace71d0d |
エンコーダー | CLSID_WICWmpEncoder | ac4ce3cb-e1c1-44cd-82155a1665509ec2 |
[エンコード]
WIC エンコード API はコーデックに依存しないように設計されており、WIC 対応コーデックの画像エンコードは基本的に同じです。 WIC API を使用した画像エンコードの詳細については、「エンコードの概要」を参照してください。
エンコーダー オプション
WIC 対応コーデックはエンコード オプション レベルで異なります。 エンコーダー オプションには画像エンコーダーの機能が反映され、各ネイティブ コーデックではこれらのエンコーダー オプションのセットがサポートされます。 エンコーダー オプションは、すべての WIC 対応コードで使用できる基本的な WIC でサポートされるオプション (必ずしもサポートされているわけではありませんが) や、画像形式コーデックによって設計されたコーデック固有のオプションです。 エンコード プロセス中にこれらのエンコード オプションを管理するために、WIC では IPropertyBag2 インターフェイスが使用されます。 WIC エンコードに IPropertyBag2 インターフェイスを使用する方法の詳細については、「エンコードの概要」を参照してください。
HD Photo コーデックでは、基本的な WIC オプションの両方が使用され、いくつかの HD Photo 固有のエンコード オプションが提供されます。 次の表に、ネイティブ HD Photo コーデックでサポートされるエンコーダー オプションの一覧を示します。
基本的な WIC エンコーダーのオプション
プロパティ名 | VARTYPE | 値の範囲 | Default Value |
---|---|---|---|
ImageQuality | VT_R4 | 0 - 1.0 | 0.9 |
Lossless | VT_BOOL | TRUE、FALSE | FALSE |
BitmapTransform | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
HD Photo 固有のエンコーダー オプション
プロパティ名 | VARTYPE | 値の範囲 | Default Value |
---|---|---|---|
UseCodecOptions | VT_BOOL | TRUE、FALSE | FALSE |
Quality | VT_UI1 | 1 - 255 | 10 |
Overlap | VT_UI1 | 0 - 2 | 1 |
Subsampling | 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 | 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 | 使用されません。 |
IgnoreOverlap | VT_BOOL | TRUE、FALSE | FALSE |
コーデックでサポートされていない IPropertyBag2 オプション リストにエンコーダー オプションが存在する場合、それは無視されます。
ImageQuality オプション
目的の画像の忠実度を指定します。 0.0 は可能な限り低い忠実度を示し、1.0 では最も高い忠実度を指定します。 HD Photo 画像形式の場合、1.0 の値を指定すると、数学的に無損失の圧縮が行われます。
既定値は 0.9 です。
CompressionQuality オプション
目的の圧縮品質を指定します。 0.0 は使用できる効率的な圧縮スキーマを示します。 通常、このスキーマではより高速なエンコードが生成されますが、出力は大きくなります。 値 1.0 では、使用できる最も効率的な圧縮スキーマを指定します。これは通常、より長いエンコードが生成されますが、出力は小さくなります。
HD Photo では、このエンコーダー オプションはサポートされていません。 IPropertyBag2 パラメーター リストに存在する場合、この値は無視されます。
Lossless オプション
損失圧縮モードを使用するかどうかを指定します。 HD Photo 画像形式の場合、この値によって ImageQuality オプション値がオーバーライドされます。
既定値は FALSE です。
BitmapTransform オプション
画像のデコード中に画像を変換する方法を指定します。 このオプションは、WICBitmapTransformOptions 列挙値のいずれかに設定する必要があります。
既定値は WICBitmapTransformOptions::WICBitmapTransformRotate0 です。
UseCodecOptions オプション
値が VARIANT_TRUE の場合、オプション値ではなく、Quality、Overlap、および Subsampling オプション。
既定値は FALSE です。
Quality オプション
画像の圧縮品質を指定します。 値 1 は無損失モードを示します。 値を大きくすると、圧縮率が高くなり、画質が低下します。
既定値は 10 です。
Overlap オプション
重複処理のレベルを指定します。
次の表に、使用可能な重複処理レベルの一覧を示します。
Value | 内容 |
---|---|
0 | 重複処理は有効になっていません。 |
1 | 1 つのレベルの重複処理が有効になっており、隣接するブロックの値に基づいて 4x4 ブロックでエンコードされた値が変更されます。 |
2 | 2 つのレベルの重複処理が有効になっています。 最初のレベルの処理に加え、16x16 マクロ ブロックのエンコードされた値は、隣接するマクロ ブロックの値に基づいて変更されます。 |
既定値は 1です。
Subsampling オプション
彩度空間の追加圧縮を指定します。 この方法では、色の詳細を代償に輝度の詳細を維持することができます。 このオプションは RGB 画像にのみ適用されます。
次の表に、使用可能なサブサンプリング オプションの一覧を示します。
Value | 説明 |
---|---|
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 行あたり 4,096 タイルの 4096 タイル行に画像が分割されます。 つまり、パラメーター値は、水平および垂直タイル (それぞれ) の数から 1 を引いたものと等しくなります。 タイルの幅または高さを 16 ピクセルより小さくすることはできません。そのため、HD Photo エンコーダーによって、必要な最小タイル サイズを維持するためにこのパラメーターが調整される場合があります。 各タイルに関連するストレージと処理のオーバーヘッドがあるため、特定のシナリオに合わせてこれらの値を慎重に選ぶ必要があります。
HorizontalTileSlices: 既定値は (画像の幅 – 1) >> 8 です。
VerticalTileSlices: 既定値は (画像の高さ – 1) >> 8 です。
FrequencyOrder オプション
画像を周波数順にエンコードする必要があることを指定します。 ファイルには最初に最も低い周波数のデータが表示され、画像のコンテンツは、その空間定位ではなく周波数でグループ化されます。 周波数順にファイルを整理すると、任意の周波数ベースのデコードに最適なパフォーマンスが得られます。そのため、この方法をお勧めします。 HD Photo エンコーダーのデバイス実装では、エンコード時に必要なメモリ占有領域を減らすために、空間的にファイルを整理できます。
既定値は TRUE であり、空間順序を使用するパフォーマンスまたはアプリケーション固有の理由がない限り、アプリケーションとデバイスでは常に周波数順序を使用することをお勧めします。
InterleavedAlpha オプション
このオプションを TRUE に設定することで、アルファ チャネル情報を追加のインタリーブ チャネルとしてエンコードするようにコーデックに指示します。画像コンテンツ チャネルとの相関関係はありません。 このモードは、ストリーミング シナリオで画像と同時にアルファをデコードする必要がある場合に便利です。
このパラメーターを FALSE に設定すると、平面アルファ チャネルが作成され、独自のオプションの Quality 値を持つ別の画像としてエンコードされます。 平面アルファ チャネルを使用することで、画像データとアルファ チャネルを個別にデコードできます。 インタリーブされたアルファ チャネルは、特定の RGB ピクセル形式でのみサポートされます。 平面アルファ チャネルは、アルファ チャネルを定義する任意の画像形式に関連付けることができます。
既定値は FALSE です。
AlphaQuality オプション
平面アルファ チャネル画像の圧縮品質を指定します。 値を 1 にすると、無損失モードが設定されます。 値を大きくすると、圧縮率が高くなり、画質が低下します。
既定値は 1です。
CompressedDomainTranscode オプション
HD Photo を使用すると、圧縮されたデータを実際にデコードして変換先ファイルに再エンコードすることなく、さまざまなファイル変換操作を実行できます。 圧縮ドメイン操作は非常に効率的であり、損失圧縮画像をデコードして再エンコードするときに一般的なさらなる品質損失が回避されます。
次の圧縮ドメイン操作がサポートされています。
- 画像の領域をトリミングする。
- 回転/反転変換を実行する。
- 周波数データを破棄する (より小さな画像ファイルを作成できるようにする)。
- 空間と周波数順序の間で画像を再編成する。
HD Photo エンコーダーでは、HD Photo デコーダーを画像ソースとして使用して HD Photo 画像をエンコードするときに、圧縮ドメイン トランスコード操作が実行されます。 選択したエンコード オプションに応じて、コーデックでは、可能であれば圧縮ドメイン操作が使用されます。 アプリケーションで圧縮ドメイン トランスコード操作を明示的に禁止することが選択された場合は、UseCodecOptions オプションを TRUE、CompressedDomainTranscode オプションを FALSE に設定する必要があります。
コーデックで圧縮ドメイン操作が実行される場合、特定のエンコーダー パラメーターとプロパティ設定のみが許可されます。
- 基本的なエンコーダー オプション ImageQuality、CompressionQuality、Lossless は無視されます。
- HD Photo 固有のエンコーダー オプション Quality、Overlap、InterleavedAlpha、AlphaQuality は無視されます。
- 存在する場合は、HorizontalTileSlices と VerticalTileSlices オプションを 0 に設定する必要があります。 画像のタイル サイズを、圧縮ドメイン トランスコードの一部として変更することはできません。
- FrequencyOrdering オプションの適切な値を指定することで、周波数と空間順序の間で画像の編成を変更できます。
- BitmapTransform エンコーダー オプションで指定された値に基づいて、カーディナル回転や水平/垂直反転操作を実行できます。
- 画像は、WriteSource エンコーダー メソッドの WICRect パラメーターを使用して目的の領域を指定することでトリミングできます。
- 画像やアルファ データは、ImageDataDiscard や AlphaDataDiscard オプションで適切な値を指定することで破棄できます。これにより、エンコード ファイル サイズが小さくなり、新しい画像の解像度が効果的に低下します。
既定値は TRUE であり、空間順序を使用する特定のパフォーマンスまたはアプリケーションの理由がない限り、アプリケーションとデバイスでは常に周波数順序を使用することをお勧めします。
ImageDataDiscard オプション
このパラメーターは、CompressedDomainTranscode オプションが TRUE の場合にのみ有効です。それ以外の場合は無視されます。 ImageDataDiscard では、圧縮ドメイン トランスコード中に破棄する画像データの量を指定します。 画像にインタリーブされたアルファ チャネルが含まれている場合、このデータの破棄はアルファ チャネルにも適用されます。ただし、このセクションで後述する例外があります。
次の値を使用できます。
Value | 内容 |
---|---|
0 | 画像の周波数データは破棄されません。 |
1 | FlexBits は破棄され、画像の有効な解像度を変更することなく、トランスコードされた画像の品質を任意に低下させます。 正確なファイル サイズの縮小または特定の品質の低下は、多数の要因に依存し、指定または予測することはできません。 この値は、インタリーブされたアルファ チャネルに対して指定した場合にエラーを返します。 |
2 | HighPass 周波数データ バンドは破棄され (FlexBits も含む)、トランスコードされた画像の解像度を両方の寸法で 4 倍に効果的に低減します。 トランスコードされた画像の実際の寸法は変わりませんが、ピクセルの各 4x4 ブロックのすべての詳細が失われます。 そのため、デコードするときは必ず、トランスコードされた画像をダウンサンプリングする必要があります。 |
3 | HighPass と LowPass の両方の周波数データ バンドは破棄され (FlexBits も含む)、トランスコードされた画像の解像度を両方の寸法で 16 倍に効果的に低減します。 トランスコードされた画像の実際の寸法は変わりませんが、ピクセルの各 16x16 マクロブロックのすべての詳細が失われます。 そのため、デコードするときは必ず、トランスコードされた画像をダウンサンプリングする必要があります。 |
既定値は0です。
AlphaDataDiscard オプション
このオプションは、CompressedDomainTranscode プロパティが TRUE で、画像に平面またはインタリーブされたアルファ チャネルが含まれている場合にのみ有効です。それ以外の場合は無視されます。 圧縮ドメイン トランスコード中に破棄するアルファ周波数データの量を指定します。 平面アルファ チャネルでは、次の値を使用できます。
Value | 内容 |
---|---|
0 | 画像の周波数データは破棄されません。 |
1 | FlexBits は破棄され、有効な解像度を変更することなく、トランスコードされた画像の平面アルファ チャネルの品質を任意に低下させます。 正確なファイル サイズの縮小または特定の品質の低下は、多数の要因に依存し、指定または予測することはできません。 |
2 | HighPass 周波数データ バンドは破棄され (FlexBits も含む)、トランスコードされた画像平面アルファ チャネルの解像度を両方の寸法で 4 倍に効果的に低減します。 トランスコードされた画像の実際の寸法は変わりませんが、画像ではピクセルの各 4x4 ブロックのすべての平面アルファ チャネルの詳細が失われます。 したがって、トランスコードされた画像は、デコードされるたびにダウンサンプリングする必要があります。 通常、この値は、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 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 で使用される値とは異なる点に注意してください。