次の方法で共有


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 のメタデータが含まれており、標準の付属書 A で定義されています。

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

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

イメージの品質設定

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

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

UseCodecOptionsVARIANT_FALSEされている場合 (既定ではVARIANT_FALSE)、エンコーダーは ImageQuality プロパティを使用します。 エンコーダーは、ImageQuality の値をルックアップ テーブルを介して 品質オーバーラップサブサンプリング にマップします。

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

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

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

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

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

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

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

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

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

エンコーダー オプション

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

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

アルファデータディスカード

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

データの種類 VARTYPE 範囲 既定値
UCHAR VT_UI1 0–4 無し

 

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

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

価値 説明
0 イメージの頻度データは破棄されません。
1 フレックスビットは破棄されます。 これにより、トランスコードされた画像の平面アルファ チャネルの品質が任意に低下します。 の場合、有効な解像度が変更される必要はありません。 ファイル サイズと品質の正確な削減は、多数の要因によって異なり、正確に指定することはできません。
2 高域周波数のデータ 帯域は、フレックスビットを含めて破棄されます。 これにより、平面アルファ チャネルの解像度が両方の次元で 4 倍に効果的に減少します。 トランスコードされたイメージの実際の寸法は変わりませんが、アルファ チャネル ピクセルの 4 x 4 ブロックごとにすべての詳細が失われます。 通常、この値は、 ImageDataDiscard プロパティの値が同じである場合にのみ設定する必要があります。
3 ハイパスとローパスの両方の周波数データ バンドが、フレックスビットを含めて破棄されます。 これにより、平面アルファ チャネルの解像度が、両方の寸法で 16 倍減少します。 トランスコードされたイメージの実際の寸法は変わりませんが、アルファ チャネル ピクセルの各 16 x 16 マクロ ブロックの詳細はすべて失われます。 通常、この値は、 ImageDataDiscard プロパティの値が同じである場合にのみ設定する必要があります。
4 アルファ チャネルは完全に破棄されます。 トランスコードされた画像のピクセル形式は、アルファ チャネルの削除を反映するように変更されます。

 

インターリーブされたアルファ チャネルを含むイメージの場合、次の値が有効です。

価値 説明
4 アルファ チャネルは完全に破棄されます。 トランスコードされた画像のピクセル形式は、アルファ チャネルの削除を反映するように変更されます。

 

インターリーブアルファの場合、このプロパティが 4 に設定されていない限り、アルファ チャネルは ImageDataDiscard プロパティの値に従って画像データと同じように処理されます。

AlphaQuality

平面アルファ チャネル イメージの圧縮品質を設定します。

データの種類 VARTYPE 範囲 既定値
UCHAR(符号なし文字) VT_UI1 1–255 1

 

このプロパティは、イメージにアルファ チャネルがあり、 InterleavedAlpha プロパティが VARIANT_FALSEされている場合に適用されます。 値 1 は、無損失モードを示します。 値を大きくすると、圧縮率が高くなり、画質が低下します。

ビットマップ変換

デコード時にイメージを回転または反転するかどうかを指定します。

データの種類 VARTYPE 範囲 既定値
UCHAR VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

 

圧縮ドメイン転送コード

圧縮ドメインのコード変換を有効または無効にします。

データの種類 VARTYPE 既定値
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

圧縮ドメイン操作を無効にするには、このプロパティを VARIANT_FALSE に設定 します

FrequencyOrder

周波数順でエンコードを有効にします。 JPEG XR エンコーダーのデバイス実装では、エンコード時に必要なメモリを減らすために、空間的にファイルを整理できます。

データの種類 VARTYPE 既定値
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

  • VARIANT_TRUE: 頻度の順序。 ファイルの最初に最も低い頻度のデータが表示され、画像のコンテンツは、空間方向ではなく頻度でグループ化されます。 ファイルを頻度順に整理すると、任意の周波数ベースのデコードに最適なパフォーマンスが得られます。
  • VARIANT_FALSE: 空間順序。 空間順序により、エンコード時に必要なメモリが削減されます

パフォーマンスやアプリケーション固有の理由で空間順序を使用しない限り、頻度順をお勧めします。

HorizontalTileSlices

水平タイルの数を設定します。

データの種類 VARTYPE 範囲 既定値
USHORT VT_UI2 0–4095 (画像の幅 – 1) >> 8

 

値は水平サブ区分の数です。つまり、水平タイルの数 – 1。

重なりを無視

圧縮されたドメイン トランスコード中にエンコーダーがタイル境界を処理する方法を指定します。

データの種類 VARTYPE 既定値
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

このプロパティは、 CompressedDomainTranscode プロパティが VARIANT_TRUE に設定され、1 つ以上のタイルのサブリージョン トランスコードが実行される場合にのみ適用されます。

リージョン トランスコードの既定の操作では、要求された領域を拡張して、領域エッジのオーバーラップ デコードに必要な周囲のピクセルを含めます。 このプロパティが VARIANT_TRUE に設定されている場合、コーデックは周囲のピクセルを無視し、選択したタイルまたはタイルのみが抽出されます。 ソース イメージがタイル化されていない場合、または要求されたリージョンに部分的なタイルが含まれている場合、このパラメーターは無視されます。

ImageDataDiscard

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

データの種類 VARTYPE 範囲 既定値
UCHAR VT_UI1 0–3 0

 

このプロパティは、 CompressedDomainTranscode プロパティが VARIANT_TRUE に設定されている場合にのみ適用されます。それ以外の場合は無視されます。

価値 説明
0 イメージの頻度データは破棄されません。
1 フレックスビットは破棄されます。 これにより、画像の有効解像度を変更することなく、トランスコードされた画像の品質が任意に低下する。 ファイル サイズと品質の正確な削減は、多数の要因によって異なり、正確に指定することはできません。 この値は、インターリーブされたアルファ チャネルに対して指定されたエラーを返します。
2 高域周波数のデータ 帯域は、フレックスビットを含めて破棄されます。 これにより、トランスコードされた画像の解像度が両方の次元で 4 倍減少します。 トランスコードされた画像の実際の寸法は変わりませんが、画像はピクセルの 4x4 ブロックごとにすべての詳細を失います。 したがって、トランスコードされたイメージは、デコードされるたびに、それに応じてダウンサンプリングする必要があります。
3 ハイパスとローパスの両方の周波数データ バンドが、フレックスビットを含めて破棄されます。 これにより、トランスコードされた画像の解像度が両方の次元で 16 倍減少します。 トランスコードされたイメージの実際の寸法は変わりませんが、ピクセルの各 16 x 16 マクロ ブロックのすべての詳細が失われます。 したがって、トランスコードされたイメージは、デコードされるたびに、それに応じてダウンサンプリングする必要があります。

 

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

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

ImageQuality

画質を設定します。

データの種類 VARTYPE 範囲 既定値
フロート VT_R4 0–1.0 0.9

 

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

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

InterleavedAlpha

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

データの種類 変数型 既定値
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

  • VARIANT_TRUE: インターリーブアルファ。 アルファ チャネル情報は、イメージ コンテンツ チャネルとの相関関係を持たない追加のインターリーブ チャネルとしてエンコードされます。 このモードは、イメージがストリーミングされているときにイメージと同時にアルファをデコードする場合に便利です。
  • VARIANT_FALSE: 平面アルファ。 平面アルファ チャネルは別のイメージとしてエンコードされます。 画像データとアルファ チャネルは個別にデコードされます。 必要に応じて、 AlphaQuality プロパティを設定することで、アルファ チャネルの品質レベルを設定できます。

インターリーブ アルファは、特定の RGB ピクセル形式でのみサポートされます。 平面アルファは、アルファ チャネルを定義する任意のイメージ形式でサポートされます。

ロスレス

損失圧縮を有効にします。

データの種類 VARTYPE 既定値
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

値が VARIANT_TRUEの場合、エンコーダーは無損失圧縮を使用します。 VARIANT_TRUEに設定すると、このプロパティは ImageQuality プロパティをオーバーライドします。

オーバーラップ

重なりフィルター処理のレベルを設定します。 オーバーラップ フィルタリングでは、変換係数がブロックとマクロ ブロックの境界を越えて適用されます。 これにより、ブロックする成果物を減らすことができます。

データの種類 VARTYPE 範囲 既定値
UCHAR VT_UI1 0–4 1

 

価値 説明
0 重複なし。
1 一層の重なり、ソフト タイリング。 (既定値)。
2 二つの重なりレベル、ソフトタイル。
3 1 層の重複、ハード タイリング
4 二レベルの重なり、ハードタイリング。

 

定義:

  • 1 レベルの重複: 4 x 4 ブロックのエンコードされた値は、隣接するブロックに基づいて変更されます。
  • 2つの重なりレベル:最初のレベルが適用されます。 さらに、16 x 16 マクロ ブロックのエンコードされた値は、隣接するマクロ ブロックに基づいて変更されます。
  • ソフト・タイリング: タイル境界を越えて重なりフィルタリングが適用されます。
  • ハード タイリング: タイルの境界を越えてオーバーラップ フィルター処理が適用されません。 ハード タイルは、タイルの境界に沿って視覚的なアーティファクトを発生させる可能性があります。

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

プログレッシブモード

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

データの種類 VARTYPE 既定値
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

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

 

品質

圧縮品質を設定します。

データの種類 VARTYPE 範囲 既定値
UCHAR VT_UI1 1–255 1

 

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

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

StreamOnly

ストリーム専用モードを有効または無効にします。

データの種類 VARTYPE 既定値
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

価値 説明
VARIANT_TRUE エンコーダーは、メタデータなしで生の画像ストリームを出力します。
VARIANT_FALSE エンコーダーはコンテナー形式 (イメージ ストリームとメタデータ) を出力します。

 

サブサンプリング

彩度サブサンプリングを設定します。 このプロパティは RGB イメージにのみ適用されます。

データの種類 VARTYPE 範囲 既定値
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 既定値
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

VerticalTileSlices

水平タイルの数を設定します。

データの種類 VARTYPE 範囲 既定値
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 (48ビット/ピクセルRGB固定小数点形式)
    • 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