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 写真 形式に基づいていますが、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 ビットの両方の浮動小数点形式をサポートします。

Tiles

フレームは、 タイルと呼ばれる四角形のサブ領域に分割できます。 タイルは、マクロ ブロックの四角形配列を含むイメージの領域です。 タイルを使用すると、イメージ全体を処理せずにイメージの領域をデコードできます。

エンコード中に、 HorizontalTileSlices プロパティと VerticalTileSlices プロパティを設定してタイルの数 選択します。 タイルの最小サイズは 16 × 16 ピクセルです。 エンコーダーは、この制限を維持するためにタイルの数を調整します。 各タイルに関連するストレージと処理のオーバーヘッドがあるため、特定のシナリオに必要なタイルの数を考慮する必要があります。

イメージ ストリーム出力

JPEG-XR 標準では、JPEG-XR ファイルの 2 つの部分が定義されています。

  • 標準の本体で定義されたイメージ ビット ストリーム。
  • イメージ コンテナー。 このファイルには Exif と XMP のメタデータが含まれており、標準の Annex A で定義されています。

標準では、イメージ ストリームを別の種類のファイル コンテナー内に埋め込むことができます。 エンコーダーはストリーム専用モードをサポートしています。このモードでは、イメージ コンテナーなしで生のイメージ ビット ストリームが出力されます。 アプリケーションは、ビット ストリームを他のコンテナー形式で格納できます。

ストリーム専用モードを有効にするには、 StreamOnly プロパティを設定します。

画質設定

いくつかのコーデック プロパティは、エンコーダーからの出力イメージの品質を制御します。

  • ImageQuality は、WIC コーデック間で共通のプロパティです。 イメージ品質を 0.0 ~ 1.0 の 1 つの浮動小数点値として指定します。
  • QualityOverlapSubsampling プロパティを使用すると、品質設定をより詳細に制御できます。

QualityOverlapSubsampling プロパティを使用するには、UseCodecOptions プロパティをVARIANT_TRUEに設定します。

UseCodecOptionsVARIANT_FALSE (VARIANT_FALSEが既定値) の場合、エンコーダーは ImageQuality プロパティを使用します。 エンコーダーは、ImageQuality の値を参照テーブルを介して 品質重複およびサブサンプリング にマップします。

エンコーダーは CompressionQuality プロパティをサポートしていません。

圧縮ドメインのトランスコード

JPEG XR コーデックは、圧縮されたデータを実際にデコードして再エンコードすることなく、特定の画像変換を実行できます。 圧縮されたドメイン操作は非常に効率的であり、非圧縮イメージをデコードして再エンコードする場合に一般的な追加の品質損失を回避します。

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

  • イメージの領域をトリミングします。
  • 画像を回転または反転します。
  • 頻度データを破棄して、より小さなイメージ ファイルを作成します。
  • 空間順序と頻度順序の間でイメージを再構成します。

JPEG XR エンコーダーは、ソース イメージが JPEG XR イメージである場合に、可能な場合は圧縮ドメイントランスコーディングを使用します。 エンコーダーは、圧縮されたドメイン操作を実行するときに、AlphaQualityImageQualityInterleavedAlphaLosslessOverlapQuality というコーデック プロパティを無視します。 HorizontalTileSlices プロパティと VerticalTileSlices プロパティが存在する場合は、0 に設定する必要があります。 圧縮されたドメイン トランスコードの一部としてイメージのタイル サイズを変更することはできません。

次の一覧では、イメージ変換を実行する方法について説明します。

  • イメージをトリミングするには、WriteSource メソッドの WICRect パラメーターで目的の領域を設定します。
  • イメージを回転または反転するには、 BitmapTransform プロパティを設定します。
  • イメージ内の頻度データを破棄するには、 ImageDataDiscard プロパティを設定します。 アルファ チャネルの周波数データを破棄するには、 AlphaDataDiscard プロパティを設定します。 頻度データを破棄すると、エンコードされたファイル サイズが減少し、解像度が低下する可能性があります。
  • 頻度と空間順序の間でイメージの編成を変更するには、 FrequencyOrdering プロパティを 設定します。

圧縮ドメイン トランスコードを無効にし、エンコーダーにイメージの再エンコードを強制するには、 UseCodecOptionsVARIANT_TRUE に設定し、 CompressedDomainTranscodeVARIANT_FALSE に設定します。

エンコーダー オプション

エンコード プロパティを設定するには、 IPropertyBag2 インターフェイスを 使用します。 詳細については、「 エンコードの概要」を参照してください。

次の一覧では、エンコーダー オプションを指定します。

AlphaDataDiscard

圧縮されたドメイントランスコード中に破棄するアルファ周波数データの量を設定します。

データ型 VARTYPE Range Default
UCHAR VT_UI1 0–4 なし

 

このプロパティは、 CompressedDomainTranscode プロパティが VARIANT_TRUE に設定されていて、イメージに平面アルファ チャネルまたはインターリーブアルファ チャネルのいずれかが含まれている場合にのみ適用されます。それ以外の場合は無視されます。

平面アルファ チャネルを含む画像の場合、次の値が有効です。

説明
0 イメージの周波数データは破棄されません。
1 flexbit は破棄されます。 これにより、トランスコードされた画像の平面アルファ チャネルの品質が任意に低下します。 、有効な解像度に変更はありません。 ファイル サイズと品質の正確な低下は、多数の要因によって異なり、正確に指定することはできません。
2 高域周波数データ バンドは、flexbit を含めて破棄されます。 これにより、平面アルファ チャネルの解像度が両方の次元で 4 倍に減ります。 トランスコードされたイメージの実際のサイズは変わりませんが、アルファ チャネル ピクセルの各 4 x 4 ブロックで画像の詳細がすべて失われます。 通常、 ImageDataDiscard プロパティの値が同じである場合にのみ、この値を設定する必要があります。
3 ハイパスとローパスの両方の周波数データ バンドは、flexbit を含めて破棄されます。 これにより、平面アルファ チャネルの解像度が両方の次元で 16 倍減少します。 トランスコードされたイメージの実際のサイズは変わりませんが、アルファ チャネル ピクセルの各 16 x 16 マクロ ブロックの詳細がすべて失われます。 通常、 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 flexbit は破棄されます。 これにより、画像の有効解像度を変更することなく、トランスコードされた画像の品質が任意に低下します。 ファイル サイズと品質の正確な低下は、多数の要因によって異なり、正確に指定することはできません。 この値は、インターリーブされたアルファ チャネルに対して指定されたエラーを返します。
2 高域周波数データ バンドは、flexbit を含めて破棄されます。 これにより、トランスコードされた画像の解像度が両方の次元で 4 倍減ります。 トランスコードされたイメージの実際のサイズは変わりませんが、画像はピクセルの各 4 x 4 ブロックのすべての詳細を失います。 したがって、トランスコードされたイメージは、デコードされるたびにダウンサンプリングする必要があります。
3 ハイパスとローパスの両方の周波数データ バンドは、flexbit を含めて破棄されます。 これにより、トランスコードされた画像の解像度が両方の次元で 16 倍減ります。 トランスコードされたイメージの実際のサイズは変わりませんが、画像はピクセルの各 16 x 16 マクロ ブロックのすべての詳細を失います。 したがって、トランスコードされたイメージは、デコードされるたびにダウンサンプリングする必要があります。

 

イメージにインターリーブされたアルファ チャネルが含まれている場合、 AlphaDataDiscard プロパティが 4 に設定されていない限り、 ImageDataDiscard の値がアルファ チャネルに適用されます。その場合、アルファ チャネルは破棄されます。

平面アルファの場合、破棄される頻度データは AlphaDataDiscard プロパティによって制御されます。

ImageQuality

イメージの品質を設定します。

データ型 VARTYPE Range Default
FLOAT VT_R4 0–1.0 0.9

 

レベル 1.0 では、数学的に無損失の圧縮が提供されます。

レベル 0.0 は最も低い品質設定です。

インターリーブAlpha

インターリーブアルファと平面アルファのどちらをエンコードするかを指定します。

データ型 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 つのレベルの重複: 最初のレベルの重複が適用されます。 さらに、16 x 16 マクロ ブロックのエンコードされた値は、隣接するマクロ ブロックに基づいて変更されます。
  • ソフト タイリング: タイルの境界を越えて重なりフィルター処理が適用されます。
  • ハード タイリング: タイルの境界を越えて重なりフィルター処理は適用されません。 ハード タイルは、タイルの境界に沿っていくつかの視覚的なアーティファクトを導入できます。

このプロパティを設定する場合は、 UseCodecOptionsVARIANT_TRUE に設定します。

ProgressiveMode

プログレッシブ エンコードを有効または無効にします。

データ型 VARTYPE Default
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

説明
VARIANT_TRUE シーケンシャル モード (既定値)。
VARIANT_FALSE プログレッシブ モード。

 

品質

圧縮品質を設定します。

データ型 VARTYPE Range Default
UCHAR VT_UI1 1–255 1

 

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

このプロパティを設定する場合は、 UseCodecOptionsVARIANT_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 は、色の詳細を犠牲にして輝度の詳細を維持します。

このプロパティを設定する場合は、 UseCodecOptionsVARIANT_TRUE に設定します。

UseCodecOptions

汎用 ImageQuality プロパティの代わりに QualityOverlapSubsampling プロパティを使用するかどうかを指定します。

データ型 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