本机 JPEG XR 编解码器可通过WINDOWS映像组件 (WIC) 获得。 编解码器支持的 JPEG XR 格式专为消费者和专业数字摄影而设计。
JPEG XR 格式最多可以实现原始 JPEG 格式的压缩效率的两倍,且压缩项目不太明显。 JPEG XR 的功能包括:
支持单色、RGB、CMYK 和 n 通道图像
8 位、16 位和 32 位整数格式
高动态范围、宽域格式,使用固定点或浮点颜色值
渐进式解码
使用相同压缩算法的丢失或无损失编码
支持对大型图像感兴趣的区域进行解码
JPEG XR 格式在以下标准文档中定义:
ITU-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 照片格式。
编解码器功能
高动态范围
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 位浮点格式。
框架可以分区为称为
磁贴的
矩形区域。 磁贴是包含宏块矩形数组的图像区域。 磁贴允许对图像的区域进行解码,而无需处理整个图像。
在编码过程中,通过设置
HorizontalTileSlices
和
VerticalTileSlices
属性来选择磁贴数。 最小磁贴大小为 16 × 16 像素。 编码器调整磁贴数,以保持此限制。 存在与每个磁贴关联的存储和处理开销,因此应考虑特定方案所需的磁贴数。
图像流输出
JPEG-XR 标准定义了 JPEG-XR 文件的两个部分:
在标准正文中定义的图像位流。
映像容器。 该文件包含 Exif 和 XMP 元数据,并在标准附件 A 中定义。
标准允许将映像流嵌入另一种类型的文件容器中, 这是可能的。 编码器支持仅流模式,该模式输出没有映像容器的原始映像位流。 应用程序可以存储其他一些容器格式的位流。
若要启用仅流模式,请设置
StreamOnly
属性。
图像质量设置
多个编解码器属性控制编码器输出图像的质量。
ImageQuality
是 WIC 编解码器中通用的属性。 它将图像质量指定为 0.0–1.0 的单个浮点值,
质量
、
重叠
和
子采样
属性可更好地控制质量设置。
若要使用
质量
、
重叠
和
子采样
属性,请将
UseCodecOptions
属性设置为
VARIANT_TRUE
。
如果
UseCodecOptions
VARIANT_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
ProgressiveMode
StreamOnly
UseCodecOptions
VerticalTileSlices
AlphaDataDiscard
设置压缩域转码期间要丢弃的 alpha 频率数据量。
VARTYPE
仅当
CompressedDomainTranscode
属性设置为
VARIANT_TRUE
并且图像包含平面 alpha 通道或交错 alpha 通道时,此属性才适用;否则会忽略它。
对于包含平面 alpha 通道的图像,以下值有效。
高通频率数据带将被丢弃,包括弹性位。 这有效地减少了两个维度中 4 的平面 alpha 通道的分辨率。 转码图像的实际尺寸保持不变,但图像在每个 4x4 的 alpha 通道像素块中丢失所有详细信息。 通常,仅当
ImageDataDiscard
属性具有相同的值时,才应设置此值。
高传递和低通频率数据带都将被丢弃,包括弹性位。 这在两个维度中将平面 alpha 通道的分辨率降低 16。 转码图像的实际尺寸保持不变,但图像会丢失 alpha 通道像素的每个 16x16 宏块中的所有详细信息。 通常,仅当
ImageDataDiscard
属性具有相同的值时,才应设置此值。
Alpha 通道完全丢弃。 转码图像的像素格式已更改,以反映 alpha 通道的删除。
当图像具有 alpha 通道且
交错式Alpha
属性
VARIANT_FALSE
时,此属性适用。 值 1 表示无损失模式。 增加值会导致压缩率较高,图像质量较低。
指定解码时图像是旋转还是翻转。
VARTYPE
VARIANT_TRUE
:频率顺序。 最低频率数据首先出现在文件中,图像内容按频率而不是空间方向进行分组。 按频率顺序组织文件可为任何基于频率的解码提供最佳性能。
VARIANT_FALSE
:空间顺序。 空间顺序减少了编码过程中所需的内存
除非有使用空间顺序的性能或应用程序特定的原因,否则建议使用频率顺序。
HorizontalTileSlices
设置水平磁贴的数量。
VARTYPE
仅当
CompressedDomainTranscode
属性设置为
VARIANT_TRUE
并且执行一个或多个磁贴的子区域转码时,才应用此属性。
区域转码的默认操作是扩展请求的区域,以包含区域边缘重叠解码所需的周围像素。 如果此属性设置为
VARIANT_TRUE
,编解码器将忽略周围的像素,并且只提取所选磁贴或磁贴。 如果未平铺源图像,或者请求的区域包含部分磁贴,则忽略此参数。
ImageDataDiscard
设置压缩域转码期间要丢弃的图像频率数据量。
VARTYPE
弹性位将被丢弃。 这可以任意减少转码图像的质量,而无需更改图像的有效分辨率。 文件大小和质量的确切减少取决于许多因素,无法完全指定。 此值返回为交错的 alpha 通道指定的错误。
丢弃高通频率数据带,包括弹性位。 这减少了两个维度中 4 的转码图像分辨率。 转码图像的实际尺寸保持不变,但图像会丢失每个 4x4 像素块中的所有详细信息。 因此,每当解码图像时,应相应地向下采样转码图像。
高传递和低通频率数据带都将被丢弃,包括弹性位。 这减少了两个维度中 16 的转码图像分辨率。 转码图像的实际尺寸保持不变,但图像会丢失每个 16x16 像素宏块中的所有详细信息。 因此,每当解码图像时,应相应地向下采样转码图像。
如果图像包含交错的 alpha 通道,
则 ImageDataDiscard
的值将应用于 alpha 通道,除非
AlphaDataDiscard
属性设置为 4,在这种情况下,将放弃 alpha 通道。
对于平面 alpha,丢弃的频率数据由
AlphaDataDiscard
属性控制。
ImageQuality
设置图像质量。
VARTYPE
VARIANT_TRUE
:交错的 alpha。 Alpha 通道信息编码为附加交错通道,与图像内容通道没有关联。 此模式可用于在图像流式传输时与图像同时解码 alpha。
VARIANT_FALSE:平面 alpha。 平面 alpha 通道编码为单独的图像。 图像数据和 alpha 通道独立解码。 (可选)可以通过设置
AlphaQuality
属性来设置 alpha 通道的质量级别。
仅某些 RGB 像素格式支持交错 alpha。 定义 alpha 通道的任何图像格式都支持平面 alpha。
启用损失压缩。
VARTYPE
两个重叠级别:应用第一个重叠级别。 此外,将根据相邻宏块修改 16x16 宏块的编码值。
软平铺:跨磁贴边界应用重叠筛选。
硬平铺:不跨图块边界应用重叠筛选。 硬磁贴可以沿图块边界引入一些视觉项目。
如果设置此属性,则还将
UseCodecOptions
设置为
VARIANT_TRUE
。
ProgressiveMode
启用或禁用渐进式编码。
VARTYPE
4:2:2 和 4:2:0 以牺牲颜色细节为代价保留亮度细节。
如果设置此属性,则还将
UseCodecOptions
设置为
VARIANT_TRUE
。
UseCodecOptions
指定是否使用
Quality
、
Overlap
和
Subsampling
属性,而不是泛型
ImageQuality
属性。
VARTYPE
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