如何使用编码选项 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

本主题向你展示如何在 BitmapEncoder 上设置编码选项。使用编码选项,你可以对编码器的行为和参数进行微调。例如,你可以在 JPEG 编码器上设置 ImageQuality 选项以控制图像质量与文件大小间的平衡。一般来说,你无需使用编码选项,因为编码器将自动选择适当的默认值。

编码选项仅由 BitmapEncoderCreateAsyncGoToNextFrameAsync 方法公开。这是因为你必须在初始化编码器或框架时指定编码选项。

你需要了解的内容

技术

先决条件

编码选项参考

你可以使用此处带有 BitmapEncoder 的编码选项。编码选项由其名称(其名称是一个字符串)和一个采用特定数据类型 (Windows.Foundation.PropertyType) 的值定义。

名称 PropertyType 使用说明 有效格式
ImageQuality 单个 有效值从 0 到 1.0。较高的值表示较高的质量。 JPEG、JPEG-XR
CompressionQuality 单个 有效值从 0 到 1.0。较高的值表示较高的效率和较低的压缩模式。 TIFF
无损 boolean 如果此参数设置为 true,则将忽略 ImageQuality 选项。 JPEG-XR
InterlaceOption boolean 是否隔行扫描图像。 PNG
FilterOption uint8 使用 PngFilterMode 枚举。 PNG
TiffCompressionMethod uint8 使用 TiffCompressionMode 枚举。 TIFF
亮度 uint32Array 包含亮度量化常数的 64 个元素的数组。 JPEG
色度 uint32Array 包含色度量化常数的 64 个元素的数组。 JPEG
JpegYCrCbSubsampling uint8 使用 JpegSubsamplingMode 枚举。 JPEG
SuppressApp0 boolean 是否取消 App0 元数据块的创建。 JPEG
EnableV5Header32bppBGRA boolean 是否编码到支持 alpha 的版本 5 BMP。 BMP

 

说明

步骤 1: 获取输出流

将接收从文件中打开的 IRandomAccessStream 的函数的开始写入要编码的文件。你必须使用通过 ReadWrite 权限打开的流。

function (stream) {

注意  此示例假定你正编码为 JPEG 图像。编码选项指定为图像格式。

 

若要了解如何获取输出流,请参阅如何对新图像进行编码

步骤 2: 创建编码选项的集合

使用 BitmapPropertySet 对象存储一个或多个编码选项。每个编码选项都是一个键值对。键是一个设置为编码选项的名称的字符串,例如 ImageQuality。值为 BitmapTypedValue 对象,它允许你将实际编码选项值与显式数据类型 (Windows.Foundation.PropertyType) 相关联。

本例向你展示如何设置 JPEG 编码器以使用最高可用质量。若要设置质量,请创建一个编码选项,其中具有键 ImageQuality 并将值设置为单精度数 1.0(表示最高有效值)。

    var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet();
    var qualityValue = new Windows.Graphics.Imaging.BitmapTypedValue(
        1.0, // Maximum quality
        Windows.Foundation.PropertyType.single
        );

    propertySet.insert("ImageQuality", qualityValue);

步骤 3: 使用编码选项初始化编码器

将具有编码选项的 CreateAsync 方法用作最后一个参数。

Windows.Graphics.Imaging.BitmapEncoder.createAsync(
        Windows.Graphics.Imaging.BitmapEncoder.jpegEncoderId,
        stream,
        propertySet
    ).then(function (encoder) {
        // Encoder is initialized with encoding options.
    });

现在,你拥有一个可以正常使用的编码器了。

相关主题

如何对新图像进行编码