JPEG XR コーデックの概要
ネイティブ JPEG XR コーデックは、Windows イメージング コンポーネント (WIC) を介して使用できます。 コーデックがサポートする JPEG XR 形式は、コンシューマー向けおよびプロフェッショナル向けのデジタル写真用に設計されています。
JPEG XR 形式では、元の JPEG 形式の最大 2 倍の圧縮効率を実現でき、圧縮アーティファクトが目立ちません。 JPEG XR の機能は次のとおりです。
- モノクロ、RGB、CMYK、n チャネルイメージのサポート
- 8 ビット、16 ビット、32 ビットの整数形式
- 固定小数点または浮動小数点の色値を使用した高ダイナミックレンジ、広色域形式
- プログレッシブ デコード
- 同じ圧縮アルゴリズムを使用した損失または無損失エンコード
- 大きな画像の対象領域のデコードのサポート
JPEG XR 形式は、次の標準ドキュメントで定義されています。
- ITU-T T.832: 情報技術 – JPEG XR 画像コーディング システム – 画像コーディング仕様
- ISO/IEC 29199-2:2010: 情報技術 — JPEG XR 画像コーディング システム — パート 2: 画像コーディング仕様
JPEG XR 標準は主に HD Photo 形式に基づいていますが、2 つの形式にはいくつかの違いがあります。 Windows 8 では、JPEG XR をサポートするように HD フォト コーデックが更新されました。 エンコーダーは常に JPEG XR 準拠のビット ストリームを出力するようになりました。 デコーダーでは、JPEG XR と HD 写真の両方の画像をデコードできます。
HD フォト コーデックに関連して、JPEG XR コーデックのパフォーマンスが大幅に向上しました。 たとえば、サムネイル生成などのサブ解像度の画像デコードと、低解像度の画像デコードが改善されています。 HD 写真形式ではなく JPEG XR 形式を使用することをお勧めします。
コーデック情報
コンポーネント | 説明 |
---|---|
ファイル名の拡張子 | "jxr" と "wdp" |
コンテナー GUID | GUID_ContainerFormatWmp |
デコーダー GUID | CLSID_WICWmpDecoder |
エンコーダー GUID | CLSID_WICWmpEncoder |
プロファイルのサポート | エンコーダーとデコーダーは、メイン プロファイルまで、レベル 128 までサポートします。 |
コーデック機能
高ダイナミックレンジ
JPEG XR では、浮動小数点または固定小数点の色を使用して、高ダイナミック レンジの画像をサポートしています。 これらの色形式では、ピクセルの数値範囲が可視範囲よりも大きいので、中間処理段階で可視範囲の上または下の色を調整できます。
- 固定小数点: 固定小数点表現では、0 は黒を表し、1.0 は最大彩度を表します。 JPEG XR コーデックは、16 ビットと 32 ビットの両方の固定小数点形式をサポートします。 16 ビットの場合、1.0 = 0x2000h。表示範囲 [0...1] に 13 ビットが与えられます。 合計範囲は –4.0 から +3.999 で、直線的にマップされます。 32 ビット、1.0 = 0x01000000h の場合、可視範囲は 24 ビット、合計範囲は –128 から +127.999 です。
- 浮動小数点: 浮動小数点表現では、0 は黒を表し、1.0 は最大彩度を表します。 JPEG XR コーデックは、16 ビットと 32 ビットの両方の浮動小数点形式をサポートします。
タイル
フレームは、 タイルと呼ばれる四角形のサブ領域にパーティション分割できます。 タイルは、マクロブロックの四角形の配列を含む画像の領域です。 タイルを使用すると、イメージ全体を処理せずにイメージの領域をデコードできます。
エンコード中に、 HorizontalTileSlices プロパティと VerticalTileSlices プロパティを設定してタイルの数 を 選択します。 タイルの最小サイズは 16 × 16 ピクセルです。 エンコーダーは、この制限を維持するためにタイルの数を調整します。 各タイルにはストレージと処理のオーバーヘッドが関連付けられているため、特定のシナリオに必要なタイルの数を考慮する必要があります。
イメージ ストリーム出力
JPEG-XR 標準では、JPEG-XR ファイルの 2 つの部分が定義されています。
- 標準の本体で定義されたイメージ ビット ストリーム。
- イメージ コンテナー。 ファイルには Exif と XMP のメタデータが含まれており、標準の Annex A で定義されています。
標準では、別の種類のファイル コンテナー内にイメージ ストリームを埋め込むことは可能であり、許可されています。 エンコーダーはストリーム専用モードをサポートしています。このモードでは、イメージ コンテナーのない生のイメージ ビット ストリームが出力されます。 アプリケーションは、ビット ストリームを他のコンテナー形式で格納できます。
ストリーム専用モードを有効にするには、 StreamOnly プロパティを設定します。
イメージ品質の設定
いくつかのコーデック プロパティは、エンコーダーからの出力イメージの品質を制御します。
- ImageQuality は、WIC コーデック間で共通のプロパティです。 イメージ品質を 0.0 から 1.0 の単一の浮動小数点値として指定します。
- Quality、Overlap、Subsampling プロパティを使用すると、品質設定をより細かく制御できます。
Quality、Overlap、および Subsampling プロパティを使用するには、UseCodecOptions プロパティを VARIANT_TRUEに設定します。
UseCodecOptions がVARIANT_FALSE (VARIANT_FALSEが既定値) の場合、エンコーダーは ImageQuality プロパティを使用します。 エンコーダーは、ImageQuality の値を参照テーブルを介して Quality、 Overlap、 Subsampling にマップします。
エンコーダーは CompressionQuality プロパティをサポートしていません。
圧縮ドメイントランスコード
JPEG XR コーデックは、圧縮されたデータを実際にデコードして再エンコードすることなく、特定の画像変換を実行できます。 圧縮されたドメイン操作は非常に効率的であり、非圧縮イメージをデコードして再エンコードする場合に一般的な追加の品質損失を回避します。
次の圧縮ドメイン操作がサポートされています。
- イメージの領域をトリミングします。
- 画像を回転または反転します。
- 頻度データを破棄して、より小さなイメージ ファイルを作成します。
- 空間順序と頻度順序の間でイメージを再構成します。
JPEG XR エンコーダーでは、ソース イメージが JPEG XR イメージの場合、可能であれば圧縮ドメイントランスコーディングが使用されます。 エンコーダーは、圧縮されたドメイン操作を実行すると、 AlphaQuality、 ImageQuality、 InterleavedAlpha、 LosslessOverlap、 Quality のコーデック プロパティを無視します。 HorizontalTileSlices プロパティと VerticalTileSlices プロパティが存在する場合は、0 に設定する必要があります。 圧縮されたドメイン トランスコードの一部としてイメージのタイル サイズを変更することはできません。
次の一覧では、イメージ変換を実行する方法について説明します。
- イメージをトリミングするには、WriteSource メソッドの WICRect パラメーターで目的の領域を設定します。
- イメージを回転または反転するには、 BitmapTransform プロパティを設定します。
- イメージ内の頻度データを破棄するには、 ImageDataDiscard プロパティを設定します。 アルファ チャネルの頻度データを破棄するには、 AlphaDataDiscard プロパティを設定します。 頻度データを破棄すると、エンコードされたファイル サイズが小さになり、解像度が低下する可能性があります。
- イメージのorganizationを frequency と spatial ordering の間で変更するには、FrequencyOrdering プロパティを設定します。
圧縮ドメイントランスコードを無効にし、エンコーダーにイメージの再エンコードを強制するには、 UseCodecOptions を VARIANT_TRUE に設定し 、CompressedDomainTranscode を VARIANT_FALSE に設定します。
エンコーダー オプション
エンコード プロパティを設定するには、 IPropertyBag2 インターフェイスを 使用します。 詳細については、「 エンコードの概要」を参照してください。
次の一覧では、エンコーダー オプションを指定します。
- AlphaDataDiscard
- AlphaQuality
- BitmapTransform
- CompressedDomainTranscode
- FrequencyOrder
- HorizontalTileSlices
- IgnoreOverlap
- ImageDataDiscard
- ImageQuality
- InterleavedAlpha
- ロスレス
- 重複
- ProgressiveMode
- Quality
- StreamOnly
- サブサンプリング
- UseCodecOptions
- VerticalTileSlices
AlphaDataDiscard
圧縮ドメイントランスコード中に破棄するアルファ周波数データの量を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | 0–4 | なし |
このプロパティは、 CompressedDomainTranscode プロパティが VARIANT_TRUE に設定され、イメージに平面アルファ チャネルまたはインターリーブ アルファ チャネルのいずれかが含まれている場合にのみ適用されます。それ以外の場合は無視されます。
平面アルファ チャネルを含むイメージの場合、次の値が有効です。
値 | 説明 |
---|---|
0 | イメージの周波数データは破棄されません。 |
1 | flexbits は破棄されます。 これにより、トランスコードされた画像の平面アルファ チャネルの品質が任意に低下します。 有効な解像度に変更はありません。 ファイル サイズと品質の正確な削減は、多数の要因に依存し、正確に指定することはできません。 |
2 | 高域周波数データ・バンドは、フレックスビットを含めて破棄されます。 これにより、平面アルファ チャネルの解像度が両方の次元で 4 倍に効果的に減少します。 トランスコードされた画像の実際の寸法は変わりませんが、画像はアルファチャネルピクセルの各4x4ブロックのすべての詳細を失います。 通常、 ImageDataDiscard プロパティの値が同じ場合にのみ、この値を設定する必要があります。 |
3 | フレックスビットを含め、ハイパスとローパスの両方の周波数データバンドが破棄されます。 これにより、平面アルファ チャネルの解像度が両方の次元で 16 倍に減ります。 トランスコードされた画像の実際の寸法は変わりませんが、画像はアルファチャネルピクセルの各16x16マクロブロックのすべての詳細を失います。 通常、 ImageDataDiscard プロパティの値が同じ場合にのみ、この値を設定する必要があります。 |
4 | アルファ チャネルは完全に破棄されます。 トランスコードされた画像のピクセル形式は、アルファ チャネルの削除を反映するように変更されます。 |
インターリーブされたアルファ チャネルを含むイメージの場合、次の値が有効です。
値 | 説明 |
---|---|
4 | アルファ チャネルは完全に破棄されます。 トランスコードされた画像のピクセル形式は、アルファ チャネルの削除を反映するように変更されます。 |
インターリーブアルファの場合、このプロパティが 4 に設定されていない限り、アルファ チャネルは ImageDataDiscard プロパティの値に従って画像データと同じように処理されます。
AlphaQuality
平面アルファ チャネル イメージの圧縮品質を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | 1–255 | 1 |
このプロパティは、イメージにアルファ チャネルがあり、 InterleavedAlpha プロパティが VARIANT_FALSEされている場合に適用されます。 値 1 は、無損失モードを示します。 値を大きくすると、圧縮率が高くなり、画質が低下します。
BitmapTransform
デコード時にイメージを回転または反転するかどうかを指定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
CompressedDomainTranscode
圧縮ドメインのトランスコードを有効または無効にします。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_TRUE |
圧縮ドメイン操作を無効にするには、このプロパティを VARIANT_FALSE に設定します。
FrequencyOrder
頻度順でエンコードを有効にします。 JPEG XR エンコーダーのデバイス実装では、エンコード時に必要なメモリを減らすために、空間的にファイルを整理できます。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_TRUE |
- VARIANT_TRUE: 頻度の順序。 ファイルの最初に最も低い頻度のデータが表示され、画像のコンテンツは、その空間方向ではなく頻度でグループ化されます。 ファイルを頻度順に整理すると、周波数ベースのデコードに最適なパフォーマンスが得られます。
- VARIANT_FALSE: 空間順序。 空間順序により、エンコード時に必要なメモリが削減されます
空間順序を使用するパフォーマンスまたはアプリケーション固有の理由がない限り、頻度の順序をお勧めします。
HorizontalTileSlices
水平タイルの数を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
Ushort | VT_UI2 | 0–4095 | (画像の幅 – 1) >> 8 |
値は水平サブ区分の数です。つまり、水平タイルの数 – 1。
IgnoreOverlap
圧縮されたドメイン トランスコード中にエンコーダーがタイル境界を処理する方法を指定します。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
このプロパティは、 CompressedDomainTranscode プロパティが VARIANT_TRUE に設定され、1 つ以上のタイルのサブリージョン トランスコードが実行される場合にのみ適用されます。
リージョントランスコードの既定の操作では、要求された領域を拡張して、リージョンエッジの重複デコードに必要な周囲のピクセルを含めます。 このプロパティが VARIANT_TRUE に設定されている場合、コーデックは周囲のピクセルを無視し、選択したタイルまたはタイルのみが抽出されます。 ソース イメージがタイル化されていない場合、または要求されたリージョンに部分的なタイルが含まれている場合、このパラメーターは無視されます。
ImageDataDiscard
圧縮ドメインのトランスコード中に破棄するイメージ頻度データの量を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | 0–3 | 0 |
このプロパティは、 CompressedDomainTranscode プロパティが VARIANT_TRUE に設定されている場合にのみ適用されます。それ以外の場合は無視されます。
値 | 説明 |
---|---|
0 | イメージの周波数データは破棄されません。 |
1 | flexbits は破棄されます。 これにより、画像の有効解像度を変更することなく、トランスコードされた画像の品質が任意に低下します。 ファイル サイズと品質の正確な削減は、多数の要因に依存し、正確に指定することはできません。 この値は、インターリーブされたアルファ チャネルに対して指定されたエラーを返します。 |
2 | 高域周波数データ・バンドは、フレックスビットを含めて破棄されます。 これにより、トランスコードされた画像の解像度が両方の次元で 4 倍減少します。 トランスコードされた画像の実際の寸法は変わりませんが、画像はピクセルの各4x4ブロックのすべての詳細を失います。 したがって、トランスコードされたイメージは、デコードされるたびに、それに応じてダウンサンプリングする必要があります。 |
3 | フレックスビットを含め、ハイパスとローパスの両方の周波数データバンドが破棄されます。 これにより、トランスコードされた画像の解像度が両方の次元で 16 倍減少します。 トランスコードされた画像の実際の寸法は変わりませんが、画像はピクセルの各16x16マクロブロックのすべての詳細を失います。 したがって、トランスコードされたイメージは、デコードされるたびに、それに応じてダウンサンプリングする必要があります。 |
イメージにインターリーブされたアルファ チャネルが含まれている場合、 AlphaDataDiscard プロパティが 4 に設定されていない限り、 ImageDataDiscard の値がアルファ チャネルに適用されます。その場合、アルファ チャネルは破棄されます。
平面アルファの場合、破棄される頻度データは AlphaDataDiscard プロパティによって制御されます。
ImageQuality
画質を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
FLOAT | VT_R4 | 0–1.0 | 0.9 |
レベル 1.0 では、数学的に無損失の圧縮が提供されます。
レベル 0.0 は最も低い品質設定です。
InterleavedAlpha
インターリーブアルファと平面アルファのどちらをエンコードするかを指定します。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
- VARIANT_TRUE: インターリーブされたアルファ。 アルファ チャネル情報は、画像コンテンツ チャネルに関連付けなしで、追加のインターリーブ チャネルとしてエンコードされます。 このモードは、イメージがストリーミングされているときに、イメージと同時にアルファをデコードする場合に便利です。
- VARIANT_FALSE: 平面アルファ。 平面アルファ チャネルは別のイメージとしてエンコードされます。 画像データとアルファ チャネルは個別にデコードされます。 必要に応じて、 AlphaQuality プロパティを設定することで、アルファ チャネルの品質レベルを設定できます。
インターリーブアルファは、特定の RGB ピクセル形式でのみサポートされています。 アルファ チャネルを定義するイメージ形式では、平面アルファがサポートされます。
ロスレス
損失圧縮を有効にします。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
値が VARIANT_TRUEの場合、エンコーダーは無損失圧縮を使用します。 VARIANT_TRUEに設定すると、このプロパティは ImageQuality プロパティをオーバーライドします。
オーバーラップ
重なりフィルター処理のレベルを設定します。 重なりフィルター処理では、変換係数がブロックとマクロブロックの境界を越えて適用されます。 これにより、ブロック成果物を減らすことができます。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | 0–4 | 1 |
値 | 説明 |
---|---|
0 | 重複なし。 |
1 | 1 レベルの重なり、ソフト タイリング。 (既定値。) |
2 | 2 つのレベルの重なり、ソフト タイル。 |
3 | 1 レベルの重なり、ハード タイリング |
4 | 重なり合う 2 つのレベルのハード タイル。 |
定義:
- 1 レベルの重複: 4x4 ブロックのエンコードされた値は、隣接するブロックに基づいて変更されます。
- 2 つのレベルの重複: 最初のレベルの重複が適用されます。 さらに、16x16 マクロブロックのエンコードされた値は、隣接するマクロブロックに基づいて変更されます。
- ソフト タイリング: タイルの境界を越えて重なるフィルター処理が適用されます。
- ハード タイル: タイルの境界を越えて重なりフィルター処理は適用されません。 ハード タイルでは、タイルの境界に沿っていくつかの視覚的な成果物が導入される場合があります。
このプロパティを設定する場合は、 UseCodecOptions も VARIANT_TRUE に設定します。
ProgressiveMode
プログレッシブ エンコードを有効または無効にします。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
値 | 説明 |
---|---|
VARIANT_TRUE | シーケンシャル モード (既定値)。 |
VARIANT_FALSE | プログレッシブ モード。 |
品質
圧縮品質を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | 1–255 | 1 |
値 1 は、無損失モードを示します。 値を大きくすると、圧縮率が高くなり、画質が低下します。
このプロパティを設定する場合は、 UseCodecOptions も VARIANT_TRUE に設定します。
StreamOnly
ストリームのみのモードを有効または無効にします。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
値 | 説明 |
---|---|
VARIANT_TRUE | エンコーダーは、メタデータなしで生の画像ストリームを出力します。 |
VARIANT_FALSE | エンコーダーは、コンテナー形式 (イメージ ストリームとメタデータ) を出力します。 |
サブサンプリング
彩度サブサンプリングを設定します。 このプロパティは、RGB イメージにのみ適用されます。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
UCHAR | VT_UI1 | 0–3 | ImageQuality> 0.8 の場合は 3、それ以外の場合は 1 |
値 | 説明 |
---|---|
3 | 4:4:4 エンコード。 完全な彩度を維持します。 |
2 | 4:2:2 エンコード。 彩度分解能は輝度分解能の1/2です。 |
1 | 4:2:0 エンコード。 彩度分解能は輝度分解能の1/4です。 |
0 | 4:0:0 エンコーディング。 すべての彩度値を破棄し、輝度のみを保持します。
メモ: コーデックではパフォーマンスを向上させるために輝度の定義が若干変更されているため、このモードは推奨されません。 代わりに、エンコードする前に画像をモノクロに変換することをお勧めします。 |
4:2:2 と 4:2:0 は、色の詳細を犠牲にして輝度の詳細を保持します。
このプロパティを設定する場合は、 UseCodecOptions も VARIANT_TRUE に設定します。
UseCodecOptions
汎用 ImageQuality プロパティの代わりに Quality、Overlap、Subsampling プロパティを使用するかどうかを指定します。
データ型 | VARTYPE | Default |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
VerticalTileSlices
水平タイルの数を設定します。
データ型 | VARTYPE | Range | Default |
---|---|---|---|
Ushort | VT_UI2 | 0–4095 | (画像の高さ – 1) >> 8 |
値は垂直サブ区分の数です。つまり、垂直タイルの数 – 1。
サポートされている色の形式
これらの形式の詳細については、「 ネイティブ ピクセル形式」を参照してください。
-
整数 RGB 形式
- GUID_WICPixelFormat24bppRGB
- GUID_WICPixelFormat24bppBGR
- GUID_WICPixelFormat32bppBGR
- GUID_WICPixelFormat48bppRGB
- GUID_WICPixelFormat32bppBGRA
- GUID_WICPixelFormat64bppRGBA
- GUID_WICPixelFormat32bppPBGRA
- GUID_WICPixelFormat64bppPRGBA
-
固定小数点 RGB 形式
- GUID_WICPixelFormat48bppRGBFixedPoint
- GUID_WICPixelFormat64bppRGBFixedPoint
- GUID_WICPixelFormat96bppRGBFixedPoint
- GUID_WICPixelFormat128bppRGBFixedPoint
- GUID_WICPixelFormat128bppRGBAFixedPoint
-
浮動小数点 RGB 形式
- GUID_WICPixelFormat48bppRGBHalf
- GUID_WICPixelFormat64bppRGBHalf
- GUID_WICPixelFormat128bppRGBFloat
- GUID_WICPixelFormat64bppRGBAFixedPoint
- GUID_WICPixelFormat64bppRGBAHalf
- GUID_WICPixelFormat128bppRGBAFloat
- GUID_WICPixelFormat128bppPRGBAFloat
-
グレースケール形式
- GUID_WICPixelFormat8bppGray
- GUID_WICPixelFormat16bppGray
- GUID_WICPixelFormat16bppGrayFixedPoint
- GUID_WICPixelFormat16bppGrayHalf
- GUID_WICPixelFormat32bppGrayFixedPoint
- GUID_WICPixelFormat32bppGrayFloat
-
パック形式
- GUID_WICPixelFormat16bppBGR555
- GUID_WICPixelFormat16bppBGR565
- GUID_WICPixelFormat32bppBGR101010
- GUID_WICPixelFormat32bppRGBE
-
CMYK 形式
- GUID_WICPixelFormat40bppCMYKAlpha
- GUID_WICPixelFormat64bppCMYK
- GUID_WICPixelFormat80bppCMYKAlpha
-
N チャネル形式
- GUID_WICPixelFormat32bpp4Channels
- GUID_WICPixelFormat40bpp5Channels
- GUID_WICPixelFormat48bpp6Channels
- GUID_WICPixelFormat56bpp7Channels
- GUID_WICPixelFormat64bpp8Channels
- GUID_WICPixelFormat32bpp3ChannelsAlpha
- GUID_WICPixelFormat40bpp4ChannelsAlpha
- GUID_WICPixelFormat48bpp5ChannelsAlpha
- GUID_WICPixelFormat56bpp6ChannelsAlpha
- GUID_WICPixelFormat64bpp7ChannelsAlpha
- GUID_WICPixelFormat72bpp8ChannelsAlpha
- GUID_WICPixelFormat48bpp3Channels
- GUID_WICPixelFormat64bpp4Channels
- GUID_WICPixelFormat80bpp5Channels
- GUID_WICPixelFormat96bpp6Channels
- GUID_WICPixelFormat128bpp8Channels
- GUID_WICPixelFormat64bpp3ChannelsAlpha
- GUID_WICPixelFormat80bpp4ChannelsAlpha
- GUID_WICPixelFormat96bpp5ChannelsAlpha
- GUID_WICPixelFormat112bpp6ChannelsAlpha
- GUID_WICPixelFormat128bpp7ChannelsAlpha
- GUID_WICPixelFormat144bpp8ChannelsAlpha