JPEG XR 編解碼器概觀
原生 JPEG XR 編解碼器可透過 Windows 映像處理元件 (WIC) 取得。 編解碼器支援的 JPEG XR 格式是專為消費者和專業數位攝影所設計。
JPEG XR 格式最多可以達到原始 JPEG 格式的壓縮效率兩倍,且壓縮成品較不明顯。 JPEG XR 的功能包括:
- 支援單色、RGB、CMYK 和 n 通道影像
- 8、16 和 32 位整數格式
- 使用固定點或浮點色彩值的高動態範圍、寬色板格式
- 漸進式解碼
- 使用相同壓縮演算法的遺失或無遺失編碼
- 支援解碼大型影像中感興趣的區域
JPEG XR 格式定義于下列標準檔中:
- 層級-T.832: 資訊技術 – JPEG XR 影像編碼系統 – 影像編碼規格
- ISO/IEC 29199-2:2010: 資訊技術 — JPEG XR 影像編碼系統 — 第 2 部分:影像編碼規格
JPEG XR 標準主要是以 HD 相片 格式為基礎,但兩種格式之間有一些差異。 在 Windows 8 中,HD 相片編解碼器已更新為支援 JPEG XR。 編碼器現在一律會輸出符合 JPEG XR 規範的位資料流程。 解碼器可以解碼 JPEG XR 和 HD 相片影像。
已對 JPEG XR 編解碼器進行與 HD 相片編解碼器相關的大幅效能改善。 例如,已改善子解析度影像解碼,例如縮圖產生,以及低解析度影像解碼。 建議您使用 JPEG XR 格式,而不是 HD 相片格式。
編解碼器資訊
元件 | Description |
---|---|
副檔名 | 「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 檔案的兩個部分:
- 定義于標準主體中的影像位資料流程。
- 映射容器。 檔案包含 Exif 和 XMP 中繼資料,且定義于標準附錄 A 中。
標準可以且允許將影像資料流程內嵌在另一種類型的檔案容器內。 編碼器支援僅限資料流程模式,其會輸出沒有映射容器的原始映射位資料流程。 應用程式可以儲存其他容器格式的位資料流程。
若要啟用僅限資料流程模式,請設定 StreamOnly 屬性。
影像品質設定
數個編解碼器屬性可控制編碼器輸出影像的品質。
- ImageQuality 是 WIC 編解碼器通用的屬性。 它會將影像品質指定為 0.0–1.0 的單一浮點值,
- 品質、重迭和子取樣屬性可讓您更充分地控制品質設定。
若要使用 Quality、 Overlap和 Subsampling 屬性,請將 UseCodecOptions 屬性設定為 VARIANT_TRUE。
如果 UseCodecOptionsVARIANT_FALSE (VARIANT_FALSE 為預設) 編碼器會使用 ImageQuality 屬性。 編碼器會將 ImageQuality 的值對應至 [品質]、[ 重迭] 和 [ 子取樣 ] 透過查閱表格。
編碼器不支援 CompressionQuality 屬性。
壓縮網域轉碼
JPEG XR 編解碼器可以執行某些影像轉換,而不需要實際解碼壓縮的資料並重新編碼。 壓縮網域作業非常有效率,並避免在解碼和重新編碼遺失壓縮影像時,通常會遺失任何其他品質遺失。
支援下列壓縮網域作業:
- 裁剪影像的區域。
- 旋轉或翻轉影像。
- 捨棄頻率資料以建立較小的影像檔。
- 在空間和頻率順序之間重新組織影像。
當來源影像是 JPEG XR 影像時,JPEG XR 編碼器會盡可能使用壓縮網域轉碼。 當編碼器執行壓縮網域作業時,它會忽略下列編解碼器屬性: AlphaQuality、 ImageQuality、 InterleavedAlpha、 LosslessOverlap和 Quality。 如果 HorizontalTileSlices 和 VerticalTileSlices 屬性存在,您必須將它們設定為零。 您無法在壓縮網域轉碼過程中變更影像的磚大小。
下列清單說明如何執行影像轉換。
- 若要裁剪影像,請在WriteSource方法的WICRect參數中設定所需的區域。
- 若要旋轉或翻轉影像,請設定 BitmapTransform 屬性。
- 若要捨棄影像中的頻率資料,請設定 ImageDataDiscard 屬性。 若要捨棄 Alpha 通道中的頻率資料,請設定 AlphaDataDiscard 屬性。 捨棄頻率資料會減少編碼的檔案大小,並可減少解析度。
- 若要在頻率和空間順序之間變更影像組織,請設定 FrequencyOrdering 屬性。
若要停用壓縮網域轉碼並強制編碼器重新編碼影像,請將 UseCodecOptions 設定為 VARIANT_TRUE ,並將 CompressedDomainTranscode 設定為 VARIANT_FALSE。
編碼器選項
若要設定編碼屬性,請使用 IPropertyBag2 介面。 如需詳細資訊,請參閱 編碼概觀。
下列清單會指定編碼器選項。
- AlphaDataDiscard
- AlphaQuality
- BitmapTransform
- CompressedDomainTranscode
- FrequencyOrder
- HorizontalTileSlices
- IgnoreOverlap
- ImageDataDiscard
- ImageQuality
- InterleavedAlpha
- Lossless
- 重疊
- ProgressiveMode
- 品質
- StreamOnly
- 子取樣
- UseCodecOptions
- VerticalTileSlices
AlphaDataDiscard
設定壓縮網域轉碼期間要捨棄的 Alpha 頻率資料量。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | 0–4 | 無 |
只有在 CompressedDomainTranscode 屬性設定為 VARIANT_TRUE ,而且影像包含平面 Alpha 色板或交錯的 Alpha 色板時,才適用此屬性;否則會忽略它。
對於包含平面 Alpha 色板的影像,下列值是有效的。
值 | 描述 |
---|---|
0 | 不捨棄影像頻率資料。 |
1 | 會捨棄 flexbit。 這可任意減少轉碼影像的平面 Alpha 色板品質。 ,沒有有效解決方式的變更。 檔案大小和品質的確切縮減取決於許多因素,而且無法完全指定。 |
2 | 會捨棄高傳遞頻率資料頻,包括 flexbits。 這可有效地減少兩個維度中 4 倍的平面 Alpha 色板解析度。 轉碼影像的實際維度保持不變,但影像會遺失每 4x4 英色板圖元區塊中的所有詳細資料。 一般而言,只有在 ImageDataDiscard 屬性具有相同的值時,才應該設定此值。 |
3 | 會捨棄高傳遞和低傳遞頻率資料頻,包括彈性位。 這可大幅減少兩個維度中 16 個平面 Alpha 色板的解析度。 轉碼影像的實際維度保持不變,但影像會遺失 Alpha 通道圖元的每個 16x16 宏區塊中的所有詳細資料。 一般而言,只有在 ImageDataDiscard 屬性具有相同的值時,才應該設定此值。 |
4 | 完全捨棄 Alpha 色頻 (Alpha Channel)。 轉碼影像的像素格式會變更,以反映移除 Alpha 色板。 |
對於包含交錯 Alpha 色板的影像,下列值有效。
值 | 描述 |
---|---|
4 | 完全捨棄 Alpha 色頻 (Alpha Channel)。 轉碼影像的像素格式會變更,以反映移除 Alpha 色板。 |
若為交錯 Alpha,除非此屬性設定為 4,否則 Alpha 通道會根據 ImageDataDiscard 屬性的值處理與影像資料相同。
AlphaQuality
設定平面 Alpha 色板影像的壓縮品質。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | 1–255 | 1 |
當影像具有 Alpha 色板且 InterleavedAlpha 屬性VARIANT_FALSE時,就會套 用這個屬性。 值 1 表示無遺失模式。 增加值會導致較高的壓縮比例和較低的影像品質。
BitmapTransform
指定解碼時影像是否旋轉或翻轉。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | WICBitmapTransformOptions | WICBitmapTransformRotate0 |
CompressedDomainTranscode
啟用或停用壓縮網域轉碼。
資料類型 | 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。
IgnoreOverlap
指定編碼器如何處理壓縮網域轉碼期間的磚界限。
資料類型 | VARTYPE | 預設 |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
只有在 CompressedDomainTranscode 屬性設定為 VARIANT_TRUE ,而且執行一或多個磚的子領域轉碼時,才會套用這個屬性。
區域轉碼的預設作業是展開要求的區域,以包含區域邊緣重迭譯所需的周圍圖元。 如果此屬性設定為 VARIANT_TRUE,編解碼器會忽略周圍圖元,而且只會擷取選取的磚或磚。 如果來源影像未並排,或要求的區域包含部分磚,則會忽略此參數。
ImageDataDiscard
設定壓縮網域轉碼期間要捨棄的影像頻率資料量。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | 0–3 | 0 |
只有在 CompressedDomainTranscode 屬性設定為 VARIANT_TRUE時,才適用此屬性;否則會忽略它。
值 | 描述 |
---|---|
0 | 不捨棄影像頻率資料。 |
1 | 會捨棄 flexbit。 這會任意減少轉碼影像的品質,而不會變更影像的有效解析度。 檔案大小和品質的確切縮減取決於許多因素,而且無法完全指定。 這個值會傳回針對交錯 Alpha 色板指定的錯誤。 |
2 | 會捨棄高傳遞頻率資料頻,包括 flexbits。 這可減少兩個維度中 4 的轉碼影像解析度。 轉碼影像的實際維度保持不變,但影像會遺失每個 4x4 圖元區塊中的所有詳細資料。 因此,每當解碼時,應該據以向下取樣轉碼的影像。 |
3 | 會捨棄高傳遞和低傳遞頻率資料頻,包括彈性位。 這可減少兩個維度中 16 個轉碼影像的解析度。 轉碼影像的實際維度維持不變,但影像會遺失每個 16x16 宏區塊圖元中的所有詳細資料。 因此,每當解碼時,應該據以向下取樣轉碼的影像。 |
如果影像包含交錯的 Alpha 色板, 則 ImageDataDiscard 的值會套用至 Alpha 通道,除非 AlphaDataDiscard 屬性設定為 4,在此情況下會捨棄 Alpha 色板。
對於平面 Alpha,捨棄的頻率資料是由 AlphaDataDiscard 屬性所控制。
ImageQuality
設定影像品質。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
FLOAT | VT_R4 | 0–1.0 | 0.9 |
層級 1.0 提供數學上不遺失的壓縮。
層級 0.0 是最低品質設定。
InterleavedAlpha
指定是否要編碼交錯的 Alpha 或平面 Alpha。
資料類型 | VARTYPE | 預設 |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
- VARIANT_TRUE:交錯 Alpha。 Alpha 通道資訊會編碼為額外的交錯通道,且不會與影像內容通道相互關聯。 當影像串流時,此模式適用于與影像同時解碼 Alpha。
- VARIANT_FALSE:平面 Alpha。 平面 Alpha 色板會編碼為個別影像。 影像資料和 Alpha 色板會獨立解碼。 您可以選擇性地設定 AlphaQuality 屬性來設定 Alpha 色板的品質等級。
只有特定 RGB 像素格式才支援交錯 Alpha。 任何定義 Alpha 色板的影像格式都支援平面 Alpha。
Lossless
啟用損失壓縮。
資料類型 | VARTYPE | 預設 |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
如果值 VARIANT_TRUE,編碼器會使用無損失壓縮。 當設定為 VARIANT_TRUE時,這個屬性會覆寫 ImageQuality 屬性。
重疊
設定重迭篩選的層級。 透過重迭篩選,轉換係數會套用到區塊和宏區塊界限。 這可減少封鎖成品。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | 0–4 | 1 |
值 | 描述 |
---|---|
0 | 無重迭。 |
1 | 一層重迭,軟並排。 (預設值。) |
2 | 兩層重迭,柔並排。 |
3 | 一層重迭,硬式並排 |
4 | 兩層重迭,硬式並排。 |
定義:
- 重迭的一個層級:4x4 區塊的編碼值會根據鄰近區塊進行修改。
- 重迭的兩個層級:套用第一層重迭。 此外,16x16 宏區塊的編碼值會根據鄰近的宏區塊修改。
- 軟磚:重迭篩選會套用到磚界限。
- 硬式並排:不會跨磚界限套用重迭篩選。 硬式磚可以沿著磚界限導入一些視覺成品。
如果您設定此屬性,也請將 UseCodecOptions 設定為 VARIANT_TRUE。
ProgressiveMode
啟用或停用漸進式編碼。
資料類型 | VARTYPE | 預設 |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
值 | Description |
---|---|
VARIANT_TRUE | 循序模式 (預設) 。 |
VARIANT_FALSE | 漸進模式。 |
品質
設定壓縮品質。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | 1–255 | 1 |
值 1 表示無遺失模式。 增加值會導致較高的壓縮比例和較低的影像品質。
如果您設定此屬性,也請將 UseCodecOptions 設定為 VARIANT_TRUE。
StreamOnly
啟用或停用僅限資料流程模式。
資料類型 | VARTYPE | 預設 |
---|---|---|
VARIANT_BOOL | VT_BOOL | VARIANT_FALSE |
值 | Description |
---|---|
VARIANT_TRUE | 編碼器會輸出未經中繼資料的原始影像資料流程。 |
VARIANT_FALSE | 編碼器會輸出容器格式, (映射資料流程加上中繼資料) 。 |
子取樣
設定 chroma 子取樣。 此屬性僅適用于 RGB 影像。
資料類型 | VARTYPE | 範圍 | 預設 |
---|---|---|---|
UCHAR | VT_UI1 | 0–3 | 如果ImageQuality> 0.8,則為 3;否則為 1 |
值 | Description |
---|---|
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
指定是否要使用 Quality、 Overlap和 Subsampling 屬性,而不是一般 ImageQuality 屬性。
資料類型 | 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
- 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