JPEG XR 编解码器概述

本地 JPEG XR 编解码器可通过 Windows 映像组件(WIC)获得。 编解码器支持的 JPEG XR 格式专为消费者和专业数字摄影而设计。

JPEG XR 格式可以达到原始 JPEG 格式的压缩效率的两倍,且压缩项目不太明显。 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 照片 格式,但两种格式之间存在一些差异。 在 Windows 8 中,HD 照片编解码器已更新以支持 JPEG XR。 编码器现在始终输出符合 JPEG XR 的位流。 解码器可以解码 JPEG XR 和 HD 照片图像。

与 HD 照片编解码器相比,已对 JPEG XR 编解码器进行了大量性能改进。 例如,亚分辨率图像解码(如缩略图生成)已得到改进,以及低分辨率图像解码。 建议使用 JPEG XR 格式而不是 HD 照片格式。

编解码器信息

组件 DESCRIPTION
文件扩展名 “jxr”和“wdp”
容器 GUID GUID_ContainerFormatWmp
解码器 GUID CLSID_WICWmpDecoder
编码器 GUID CLSID_WICWmpEncoder
个人资料支持 编码器和解码器最多支持“Main Profile”和级别 128。

 

编解码器功能

高动态范围

JPEG XR 支持高动态范围图像,使用浮点或定点颜色。 在这些颜色格式中,像素的数字范围大于可见范围,因此可以在中间处理阶段调整可见范围上方或下方的颜色。

  • 固定点:在固定点表示中,0 表示黑色,1.0 表示最大饱和度。 JPEG XR 编解码器支持 16 位和 32 位固定点格式。 对于 16 位,1.0 = 0x2000h,它为可见范围 [0...1] 提供 13 位。 总范围为 –4.0 到 +3.999,并按线性映射。 对于 32 位,1.0 = 0x010000000h,可见范围为 24 位,总范围为 –128 到 +127.999。
  • 浮点:在浮点表示中,0 表示黑色,1.0 表示最大饱和度。 JPEG XR 编解码器支持 16 位和 32 位浮点格式。

瓷砖

可以将框架分区为矩形子区域,称这些子区域为磁贴。 磁贴是包含宏块矩形数组的图像区域。 磁贴允许对图像的区域进行解码,而无需处理整个图像。

在编码期间,通过设置 HorizontalTileSlicesVerticalTileSlices 属性来选择磁贴数。 最小磁贴大小为 16 × 16 像素。 编码器调整磁贴数以保持此限制。 存在与每个磁贴关联的存储和处理开销,因此应考虑特定方案所需的磁贴数。

图像流输出

JPEG-XR 标准定义 JPEG-XR 文件的两个部分:

  • 在标准正文中定义的图像位流。
  • 映像容器。 该文件包含 Exif 和 XMP 元数据,并在标准的附件 A 中定义。

标准允许将图像流嵌入另一种类型的文件容器中,这是可能的。 编码器支持仅流模式,该模式输出没有映像容器的原始图像位流。 应用程序可以采用其他一些容器格式存储位流。

若要启用仅流模式,请设置 StreamOnly 属性。

图像质量设置

多个编解码器属性控制编码器输出图像的质量。

  • ImageQuality 是 WIC 编解码器中通用的属性。 它将图像质量指定为 0.0–1.0 的单个浮点值,
  • 质量重叠子采样属性可更好地控制质量设置。

若要使用 质量重叠子采样 属性,请将 UseCodecOptions 属性设置为 VARIANT_TRUE

如果 UseCodecOptions是VARIANT_FALSEVARIANT_FALSE 为默认值),则编码器使用 ImageQuality 属性。 编码器通过查找表将 ImageQuality 的值映射到 质量重叠子采样

编码器不支持 CompressionQuality 属性。

压缩域转码

JPEG XR 编解码器可以执行某些图像转换,而无需实际解码压缩的数据并将其重新编码。 压缩域操作非常高效,避免了解码和重新编码有损压缩图像时出现的任何额外的质量损失。

支持以下压缩域中的操作:

  • 裁剪图像的区域。
  • 旋转或翻转图像。
  • 放弃频率数据以创建较小的图像文件。
  • 在空间顺序和频率顺序之间重新组织图像。

如果源图像是 JPEG XR 图像,则 JPEG XR 编码器使用压缩域转码(如果可能)。 当编码器执行压缩域作时,它将忽略以下编解码器属性: AlphaQualityImageQualityInterleavedAlpha无损失重叠质量。 如果 存在 HorizontalTileSlicesVerticalTileSlices 属性,则必须将它们设置为零。 不能在压缩域转码过程中更改图像块大小。

以下列表介绍了如何执行图像转换。

  • 若要裁剪图像,请在 WriteSource 方法的 WICRect 参数中设置所需的区域。
  • 若要旋转或翻转图像,请设置 BitmapTransform 属性。
  • 若要放弃图像中的频率数据,请设置 ImageDataDiscard 属性。 若要放弃 alpha 通道中的频率数据,请设置 AlphaDataDiscard 属性。 放弃频率数据会减少编码的文件大小,并可以减少分辨率。
  • 若要在频率和空间排序之间更改图像组织,请设置 FrequencyOrdering 属性。

若要禁用压缩域转码并强制编码器重新编码图像,请将 UseCodecOptions 设置为 VARIANT_TRUE 并将 CompressedDomainTranscode 设置为 VARIANT_FALSE

编码器选项

若要设置编码属性,请使用 IPropertyBag2 接口。 有关详细信息,请参阅 编码概述

以下列表指定编码器选项。

AlphaDataDiscard

设置压缩域转码期间要丢弃的 alpha 频率数据量。

数据类型 VARTYPE 范围 违约
UCHAR VT_UI1 0–4 没有

 

仅当 CompressedDomainTranscode 属性设置为 VARIANT_TRUE 并且图像包含平面 alpha 通道或交错 alpha 通道时,此属性才适用;否则,将忽略它。

对于包含平面 alpha 通道的图像,以下值有效。

价值 DESCRIPTION
0 不会丢弃任何图像频率数据。
1 将丢弃 flexbits。 这可以任意降低转码图像的平面 alpha 通道的质量。 ,没有改变有效分辨率。 文件大小和质量的确切减少取决于许多因素,无法完全指定。
2 丢弃高通频率数据带,包括弹性位。 这有效地将平面 alpha 通道的分辨率减为两个维度中的 4 倍。 转码图像的实际尺寸保持不变,但图像会丢失每 4x4 个 alpha 通道像素块中的所有详细信息。 通常,仅当 ImageDataDiscard 属性具有相同的值时,才应设置此值。
3 高通和低通频率数据带都将被丢弃,包括弹性位。 这在两个维度中将平面 alpha 通道的分辨率降低为 16。 转码图像的实际尺寸保持不变,但图像会丢失 alpha 通道像素的每个 16x16 宏块中的所有详细信息。 通常,仅当 ImageDataDiscard 属性具有相同的值时,才应设置此值。
4 Alpha 通道被完全丢弃。 已转码图像的像素格式已更改,以反映删除 alpha 通道。

 

对于包含交错 alpha 通道的图像,以下值有效。

价值 DESCRIPTION
4 alpha 通道被完全丢弃。 已转码图像的像素格式已更改,以反映删除 alpha 通道。

 

对于交错 alpha,除非此属性设置为 4,否则根据 ImageDataDiscard 属性的值,alpha 通道将与图像数据相同地处理。

AlphaQuality

设置平面 alpha 通道图像的压缩质量。

数据类型 VARTYPE 范围 违约
UCHAR VT_UI1 1–255 1

 

当图像具有 alpha 通道且 InterleavedAlpha 属性 VARIANT_FALSE时,此属性适用。 值 1 表示无损失模式。 增加值会导致更高的压缩率和较低的图像质量。

位图转换

指定在解码时图像是旋转还是翻转。

数据类型 VARTYPE 范围 违约
UCHAR VT_UI1 WICBitmapTransformOptions WICBitmapTransformRotate0

 

CompressedDomainTranscode

启用或禁用压缩域转码。

数据类型 VARTYPE 违约
VARIANT_BOOL VT_BOOL VARIANT_TRUE

 

若要禁用压缩域作,请将此属性设置为 VARIANT_FALSE

频率排序

按频率顺序启用编码。 JPEG XR 编码器的设备实现可以按空间组织文件,以减少编码期间所需的内存。

数据类型 变量类型 违约
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 并且执行一个或多个磁贴的子区域转码时,才会应用此属性。

区域转码的默认操作是扩展所请求的区域,以包含区域边缘解码所需的重叠的周围像素。 如果此属性设置为 VARIANT_TRUE,则编解码器将忽略周围的像素,并且仅提取所选磁贴或磁贴。 如果源图像未平铺或请求的区域包含部分磁贴,则忽略此参数。

ImageDataDiscard

设置压缩域转码期间要丢弃的图像频率数据量。

数据类型 VARTYPE 范围 违约
UCHAR VT_UI1 0–3 0

 

仅当 CompressedDomainTranscode 属性设置为 VARIANT_TRUE时,此属性才适用;否则,将忽略它。

价值 DESCRIPTION
0 不会丢弃任何图像频率数据。
1 弹性位将被丢弃。 这可以任意降低转码图像的质量,而无需更改图像的有效分辨率。 文件大小和质量的确切减少取决于许多因素,无法完全指定。 此值返回为交错的 alpha 通道指定的错误。
2 丢弃高通频率数据带,包括弹性位。 将转码图像的分辨率在长宽两个维度上降低到原来的四分之一。 转码图像的实际尺寸保持不变,但图像在每个 4x4 像素块中丢失所有详细信息。 因此,每当解码时,应相应地对经过转码的图像进行向下采样。
3 高通和低通频率数据带都将被丢弃,包括弹性位。 在两个维度中,转码图像的分辨率被降低到原来的1/16。 转码图像的实际尺寸保持不变,但图像会丢失每个 16x16 像素宏块中的所有详细信息。 因此,每当解码转码图像时,都应相应地对其进行向下采样。

 

如果图像包含交织的 alpha 通道,则 ImageDataDiscard 的值将应用于 alpha 通道,除非 AlphaDataDiscard 属性设置为 4,在这种情况下,alpha 通道将被丢弃。

对于平面 alpha,丢弃的频率数据由 AlphaDataDiscard 属性控制。

ImageQuality

设置图像质量。

数据类型 VARTYPE 范围 违约
浮动 VT_R4 0–1.0 0.9

 

级别 1.0 提供数学无损失压缩。

级别 0.0 是最低质量设置。

InterleavedAlpha

指定是编码交错格式的 alpha 还是平面格式的 alpha。

数据类型 变量类型 违约
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

  • VARIANT_TRUE:交错的 alpha。 Alpha 通道信息编码为附加交错通道,与图像内容通道没有关联。 此模式可用于在图像流式传输时与图像同时解码 alpha。
  • VARIANT_FALSE:平面阿尔法。 平面 alpha 通道编码为单独的图像。 图像数据和阿尔法通道是独立解码的。 (可选)可以通过设置 AlphaQuality 属性来设置 alpha 通道的质量级别。

仅某些 RGB 像素格式支持交错 alpha。 定义 alpha 通道的任何图像格式都支持平面 alpha。

无损

启用损失压缩。

数据类型 变量类型 违约
VARIANT_BOOL VT_BOOL VARIANT_FALSE

 

如果值为 VARIANT_TRUE,则编码器使用无损失压缩。 设置为 VARIANT_TRUE时,此属性将替代 ImageQuality 属性。

重叠

设置重叠筛选级别。 在重叠筛选中,转换系数被应用于块和宏块的边界。 这可以减少阻塞项目。

数据类型 VARTYPE 范围 违约
UCHAR VT_UI1 0–4 1

 

价值 DESCRIPTION
0 无重叠。
1 一级重叠,软平铺。 (默认。)
2 两个重叠级别,软性平铺。
3 一级重叠,固定平铺
4 两层重叠,严格平铺。

 

定义:

  • 重叠的一级:被编码的 4x4 块的值根据相邻块进行修改。
  • 两个重叠级别:第一个重叠级别已被应用。 此外,根据相邻的宏块修改 16x16 宏块的编码值。
  • 软平铺:跨磁贴边界应用重叠筛选。
  • 严格平铺:不在磁贴边界上应用重叠过滤。 硬磁贴可以沿磁贴边界引入一些视觉项目。

如果设置此属性,则还将 UseCodecOptions 设置为 VARIANT_TRUE

渐进模式

启用或禁用渐进式编码。

数据类型 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 编码器输出容器格式(图像流和元数据)。

 

子采样

设置色度子采样。 此属性仅适用于 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

指定是否使用 质量重叠子采样 属性,而不是泛型 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_WIC像素格式32位灰度浮点
  • 打包格式
    • 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_WIC像素格式128bpp7通道Alpha
    • GUID_WICPixelFormat144bpp8ChannelsAlpha